根据这篇文章:What does FETCH_HEAD in Git mean?
FETCH_HEAD是一个短命的参考,用于跟踪刚刚发生的事情 从远程存储库中获取。
为什么在取出后没有立即检出FETCH_HEAD?为什么只有在我将原点的跟踪分支合并到我的本地主人后才能检出它?
答案 0 :(得分:0)
为什么在取出后没有
FETCH_HEAD
检出?为什么只有在我将原点的跟踪分支合并到我的本地主人后才能检出它?
FETCH_HEAD
本身并不引用任何分支:它只记住最后一次获取的SHA1
因为它没有引用分支,所以它没有真正检出(并且不应该被检出),或者最终会得到 detached head 。
但是,将跟踪分支合并到master
分支将更新HEAD
(指向更新的主分支):该分支已签出。
如果合并为"fast-forward" one,则签出的分支HEAD
和 FETCH-HEAD
会引用相同的SHA1,从而产生FETCH_HEAD
已“签出”的印象(事实并非如此)
换句话说,在下图中:
FETCH_HEAD
的“签出”勾选仅因为它引用了与当前签出分支HEAD
相同的SHA1(此处为master
)
这意味着,如果您执行新提交:
FETCH_HEAD
将不再有签出的勾号(它仍会引用最后一次获取的SHA1)。这就是为什么我说它不是“真正”签出的(在“新的提交后它不会保持签出”的意义上,因为它是 fixed < / em>引用特定的SHA1)HEAD
和master
分支会引用新的SHA1,并会保留签出的勾号。但是,如果你直接检查FETCH_HEAD
SHA1(在合并到master
之前:the Egit User Guide提到你可以这样做,如果参考尚未检出) ,然后:
FETCH_HEAD
仍将“签出”HEAD
master
(或任何其他分支)将不再签出:这是DETACHED HEAD situation 如果您要在签出FETCH_HEAD
之上进行新提交:
FETCH_HEAD
将不再签出(因为它在上次提取的SHA1上保持固定)您需要在FETCH_HEAD
之上打开已签出的提交,并从那里创建一个分支:
(来自文章“Git Lesson: Be mindful of a detached head”)
总结:
每次在FETCH_HEAD
引用上看到“签出勾选”时,都是因为它引用的SHA1与当前签出的引用相同(提交,或者分支)
not 是因为FETCH_HEAD
本身已经签出:你在它上面做了一个新的提交,它将不再被检出。