以主人为首但仍然超然?
Head at master but still detached?
假设我有一个包含三个提交的 Git 回购协议:
$ git log --oneline
62fa462 (HEAD, master) Third commit
76f2df9 Second commit
c05b82a First commit
现在我不小心使用 checkout
将 HEAD
移动到第二个提交:
$ git checkout 76f2df9
Previous HEAD position was 62fa462 Third commit
HEAD is now at 76f2df9 Second commit
然后我想恢复以前的状态所以我使用 reset
:
$ git reset --hard 62fa462
HEAD is now at 62fa462 Third commit
成功了,从日志中可以看出,HEAD
再次指向 master
:
$ git log --oneline
62fa462 (HEAD, master) Third commit
76f2df9 Second commit
c05b82a First commit
但是,当我检查状态时,我得到:
$ git status
HEAD detached from 76f2df9
nothing to commit, working tree clean
我不太明白,为什么 HEAD
仍然分离?在日志中,它显示 (HEAD, master)
所以它应该指向 master
分支,对吧?至少日志看起来和开始时一切正常时一模一样。
这里出了什么问题?
分离的 HEAD 意味着 HEAD
不是 link 到 b运行ch 的头部。 b运行ch head 始终是对提交的引用。另一方面,HEAD
是对提交或 b运行ch 头的引用。
开始的时候,HEAD
特指master
,不是62fa462
;从图形上看,它看起来像
62fa462 <----- master <---- HEAD
|
v
76f2df9
|
v
c05b82a
签出后,HEAD
不再引用 b运行ch 头,而是直接提交; 这就是超脱的意思
$ git checkout 76f2df9
62fa462 <-+-- master
|
v
76f2df9 <----- HEAD
|
v
c05b82a
当你运行reset
时,你没有查看b运行chmaster
;您检查了 master
引用的提交:
62fa462 <-+-- master
| \-- HEAD
v
76f2df9
|
v
c05b82a
只有当你有一个 b运行ch 签出时,b运行ch head 才能被新提交推进;否则,只有 HEAD
引用新的提交,下次你 运行 git checkout
.
时你会忘记它
假设我有一个包含三个提交的 Git 回购协议:
$ git log --oneline
62fa462 (HEAD, master) Third commit
76f2df9 Second commit
c05b82a First commit
现在我不小心使用 checkout
将 HEAD
移动到第二个提交:
$ git checkout 76f2df9
Previous HEAD position was 62fa462 Third commit
HEAD is now at 76f2df9 Second commit
然后我想恢复以前的状态所以我使用 reset
:
$ git reset --hard 62fa462
HEAD is now at 62fa462 Third commit
成功了,从日志中可以看出,HEAD
再次指向 master
:
$ git log --oneline
62fa462 (HEAD, master) Third commit
76f2df9 Second commit
c05b82a First commit
但是,当我检查状态时,我得到:
$ git status
HEAD detached from 76f2df9
nothing to commit, working tree clean
我不太明白,为什么 HEAD
仍然分离?在日志中,它显示 (HEAD, master)
所以它应该指向 master
分支,对吧?至少日志看起来和开始时一切正常时一模一样。
这里出了什么问题?
分离的 HEAD 意味着 HEAD
不是 link 到 b运行ch 的头部。 b运行ch head 始终是对提交的引用。另一方面,HEAD
是对提交或 b运行ch 头的引用。
开始的时候,HEAD
特指master
,不是62fa462
;从图形上看,它看起来像
62fa462 <----- master <---- HEAD
|
v
76f2df9
|
v
c05b82a
签出后,HEAD
不再引用 b运行ch 头,而是直接提交; 这就是超脱的意思
$ git checkout 76f2df9
62fa462 <-+-- master
|
v
76f2df9 <----- HEAD
|
v
c05b82a
当你运行reset
时,你没有查看b运行chmaster
;您检查了 master
引用的提交:
62fa462 <-+-- master
| \-- HEAD
v
76f2df9
|
v
c05b82a
只有当你有一个 b运行ch 签出时,b运行ch head 才能被新提交推进;否则,只有 HEAD
引用新的提交,下次你 运行 git checkout
.