Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference in the output of git log --decorate: (HEAD -> master) vs (HEAD, master)

Tags:

git

git-log

When I get the log of a GIT repo:

git log --oneline --decorate --graph

the output is like this:

* 44025ed (HEAD -> master) second commit
* adf2dbb first commmit

In another repo, when I git log, I get:

* 435b61d (HEAD,master) bar
* 9773e52 foo

What is the difference between (HEAD -> master) and (HEAD,master)

like image 385
floatingpurr Avatar asked May 20 '16 10:05

floatingpurr


1 Answers

The arrow points to the current branch

An arrow to the right of HEAD, in the output of git log --oneline --decorate --graph, indicates which branch (if any) is the current one.

* 44025ed (HEAD -> master) second commit

means that the symbolic reference HEAD currently points to the master branch; in other words, you are not in detached-HEAD state, and the current branch is master.

enter image description here

In contrast,

* 44025ed (HEAD, master) second commit

means that the symbolic reference HEAD does not currently point to any branch, but to a commit (44025ed) directly; in other words, you are in detached-HEAD state. The master branch is only listed alongside HEAD because it happens to point to the same commit (44025ed).

enter image description here

Some history

For information, this distinction was introduced in Git (2.4) shortly after I asked the following question: Can git log --decorate unambiguously tell me whether the HEAD is detached?

A small experiment (to fix ideas)

$ mkdir decorate-test
$ cd decorate-test/
$ git init
Initialized empty Git repository in /xxxxxxx/decorate-test/.git/
$ touch README
$ git add README
$ git commit -m "Add README"
[master (root-commit) 50781c9] Add README
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README
$ git log --oneline --decorate --graph
* 50781c9 (HEAD -> master) Add README
# Note the presence of the arrow in the output.

# Now, check out the commit directly to detach the HEAD:
$ git checkout 50781c9
Note: checking out '50781c9'.

You are in 'detached HEAD' state. You can look around, ...

HEAD is now at 50781c9... Add README
$ git log --oneline --decorate --graph
* 50781c9 (HEAD, master) Add README
# The arrow is gone!

# Check out master again to reattach the HEAD:
$ git checkout master
Switched to branch 'master'
$ git log --oneline --decorate --graph
* 50781c9 (HEAD -> master) Add README
# The arrow is back!
like image 134
jub0bs Avatar answered Oct 19 '22 11:10

jub0bs