216

I have a commit c. I want to get the changeset of that exact commit c + metainformation and no other one. Is there a simpler way than git log -p c^..c to do that?

Johwhite
  • 323
  • 4
  • 18
zedoo
  • 10,562
  • 12
  • 44
  • 55

4 Answers4

333

You can use show:

git show commit_id
Fantastic Mr Fox
  • 32,495
  • 27
  • 95
  • 175
Michał Trybus
  • 11,526
  • 3
  • 30
  • 42
  • 1
    And git show defaults to HEAD as commit_id, so ```git show``` by itself shows the single most recent commit for your current branch. – James Moore Dec 01 '20 at 17:32
69

Michal Trybus' answer is the best for simplicity. But if you don't want the diff in your output you can always do something like:

git log -1 -U c

That will give you the commit log, and then you'll have full control over all the git logging options for your automation purposes. In your instance you said you wanted the change-set. The most human-readable way to accomplish that would be:

git log --name-status --diff-filter="[A|C|D|M|R|T]" -1 -U c

Or, if you're using a git version greater than 1.8.X it would be:

git log --name-status --diff-filter="ACDMRT" -1 -U c

This will give you results similar to:

commit {c}
Author: zedoo <zedoo@stackoverflow.com>
Date: Thu Aug 2 {time-stamp}

   {short description}
D    zedoo/foo.py
A    zedoo/bar.py

Of course you can filter out whichever events you see fit, and format the return as you wish via the traditional git-log commands which are well documented here.

SuperFamousGuy
  • 1,455
  • 11
  • 16
  • 16
    If you don't want the diff, do `git show --name-only `! – dbn Mar 09 '13 at 01:09
  • 23
    If you just don’t want the diff, use `git show -s `. – moeffju Jul 20 '14 at 00:00
  • 4
    What does `-1` do? Where is it documented? – alex Mar 20 '18 at 15:12
  • 2
    @alex See the output of `git help log` under the "Commit Limiting" section. Or see https://git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History#limit_options `-` limits the number of commits to output. – LarsH May 23 '18 at 19:20
  • If you don't want the diff but list of files changed, another way to do `git show --stat ` – B.Z. Mar 20 '21 at 13:25
19

git log -p c -1 does just that .

Robert Munteanu
  • 67,031
  • 36
  • 206
  • 278
  • 7
    What does -1 do? Where is it documented? – alex Mar 20 '18 at 15:12
  • 8
    @alex: The "-1" limits the number of displayed entries to the given number, it's short-hand for `-n 1` or `--max-number=1` and is [documented here](https://git-scm.com/docs/git-log#git-log--ltnumbergt). – derpasaurus Jun 14 '18 at 10:59
  • Output is precisely the same as `git show $sha` for me on git v2.37.3. – ken Nov 04 '22 at 15:05
1

You can use to filter change by description of commit:

git log --grep='part_of_description' -p

where git log --grep='part_of_description' select the commits that contains 'part_of_description' and -p show the changeset of each commit

natielle
  • 380
  • 3
  • 14