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

夙愿已清 提交于 2020-05-07 18:59:28

问题


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)


回答1:


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.

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).

Some history

For information, this distinction was introduced in Git (2.4) shortly after Can git log --decorate unambiguously tell me whether the HEAD is detached? was asked on Stack Overflow.

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!


来源:https://stackoverflow.com/questions/37344763/difference-in-the-output-of-git-log-decorate-head-master-vs-head-maste

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!