git log输出的差异--decorate :( HEAD - > master)vs(HEAD,master)

flo*_*urr 8 git git-log

当我得到GIT仓库的日志时:

git log --oneline --decorate --graph
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

* 44025ed (HEAD -> master) second commit
* adf2dbb first commmit
Run Code Online (Sandbox Code Playgroud)

在另一个回购中,当我git log,我得到:

* 435b61d (HEAD,master) bar
* 9773e52 foo
Run Code Online (Sandbox Code Playgroud)

(HEAD -> master)和之间有什么区别(HEAD,master)

jub*_*0bs 10

箭头指向当前分支

HEAD输出中右侧的箭头git log --oneline --decorate --graph表示哪个分支(如果有)是当前分支.

* 44025ed (HEAD -> master) second commit
Run Code Online (Sandbox Code Playgroud)

表示符号引用HEAD当前指向master分支; 换句话说,您处于分离-HEAD状态,而当前分支是master.

在此输入图像描述

相反,

* 44025ed (HEAD, master) second commit
Run Code Online (Sandbox Code Playgroud)

意味着,符号引用HEAD没有目前指向任何分支,但要提交(44025ed直接地); 换句话说,你处于分离-HEAD状态.该master分支仅HEAD与其一起列出,因为它恰好指向相同的commit(44025ed).

在此输入图像描述

一些历史

有关信息,这个区别是在Git(2.4)之后不久引入的.git log --decorate明确地告诉我HEAD是否已经分离?被问到Stack Overflow.

一个小实验(修复想法)

$ 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!
Run Code Online (Sandbox Code Playgroud)

  • 如果您看到“(HEAD, master)”,则“HEAD”*不*指向“master”;相反,“HEAD”和“master”指向同一个提交。为了澄清起见,我将在今天晚些时候在我的答案中添加图片。 (2认同)
  • 所以,我认为这意味着,当我的 Git 日志在提交哈希旁边显示 `(HEAD -> Refactor, origin/Refactor, develop)` 时,这意味着 HEAD 指向 Refactor,Refactor 指向提交,以及远程 Refactor 和开发也指向这个提交?并且(在 Git bash 中)绿色分支是本地的,红色是远程的? (2认同)