334

What command can I use to print out the commit id of HEAD?

This is what I'm doing by hand:

$ cat .git/HEAD
ref: refs/heads/v3.3
$ cat .git/refs/heads/v3.3
6050732e725c68b83c35c873ff8808dff1c406e1

But I need a script that can reliably pipe the output of some command to a text file such that the text file contains exactly the commit id of HEAD (nothing more or less, and not just a ref). Can anyone help?

Jon Seigel
  • 12,035
  • 8
  • 56
  • 92
Andrew Arnott
  • 77,719
  • 25
  • 129
  • 167
  • I have a similar question before. And it was well answered here: https://stackoverflow.com/questions/44994626/why-git-use-2-different-commands-to-show-head – smwikipedia Jul 09 '17 at 09:20

8 Answers8

582

Use the command:

git rev-parse HEAD

For the short version:

git rev-parse --short HEAD
Jorge Ferreira
  • 92,915
  • 25
  • 117
  • 131
Randal Schwartz
  • 33,786
  • 4
  • 37
  • 62
64
git log -1

for only commit id

git log | head -n 1 
cyb0k
  • 2,190
  • 22
  • 19
  • Thanks, it's easy – eC Droid May 15 '19 at 09:40
  • Just FYI: `git log | head -1` is as same as `git log | head -n 1` . – Milan May 26 '21 at 18:57
  • Although the OP has only asked for the commit ID of HEAD, `git log -1` is very useful. Because it also displays the commit message and other details which makes further analysis/comparison easy. Thank you! – Milan May 26 '21 at 19:00
19

Old thread, still for future reference...:) even following works

git show-ref --head

by default HEAD is filtered out. Be careful about following though ; plural "heads" with a 's' at the end. The following command shows branches under "refs/heads"

 git show-ref --heads
Abhijit Mazumder
  • 7,287
  • 6
  • 33
  • 43
  • 5
    using these commands in a (large) git repo, I get two lines from `git show-ref --heads` and 6290 lines from `git show-ref --head`. so if you want just a single hash, this gives maybe not the intended result. – Remigius Stalder Jun 15 '17 at 08:47
13

You can specify git log options to show only the last commit, -1, and a format that includes only the commit ID, like this:

git log -1 --format=%H

If you prefer the shortened commit ID:

git log -1 --format=%h

JotaBe
  • 36,481
  • 7
  • 93
  • 114
6

Play with Bash:

git show HEAD | sed -n 1p | cut -d " " -f 2
Peter Mortensen
  • 30,030
  • 21
  • 100
  • 124
Ali Moreno
  • 61
  • 1
  • 2
2

git rev-parse --abbrev-ref HEAD

Avdhut Mankavale
  • 377
  • 3
  • 11
  • 1
    This does not show commit ID, but rather any names (like branches or tags) associated with the commit. This is not what the original user wanted. – Asfand Qazi Nov 08 '18 at 11:42
  • @AsfandQazi but it was exactly what I wanted to know, and my google search gave me this article at the top. – Axel Bregnsbo Feb 09 '21 at 09:28
0

You can use this command

$ git rev-list HEAD

You can also use the head Unix command to show the latest n HEAD commits like

$ git rev-list HEAD | head - 2

starscream_disco_party
  • 2,606
  • 5
  • 25
  • 42
medmik
  • 1
  • 2
0

You can use

git log -g branchname

to see git reflog information formatted like the git log output along with commit id.

Stuti Verma
  • 989
  • 12
  • 30