为什么FETCH_HEAD
提取后没有立即签出?为什么只有在我将源的跟踪分支合并到我的本地 master 后才被检出?
FETCH_HEAD
本身不引用任何分支:它只记住最后获取的 SHA1。
因为它没有引用分支,所以它并没有真正被检出(也不应该被检出),或者你最终会得到一个分离的 head。
但是,将跟踪分支合并到master
分支将更新HEAD
(指向更新的 master):该分支已签出。
如果合并是“快进”HEAD
,则签出分支FETCH-HEAD
将引用相同的 SHA1,给人的印象FETCH_HEAD
是“签出”(实际上并非如此)
换句话说,在下图中:
![在 Egit 签出](https://i.stack.imgur.com/Kfvry.jpg)
FETCH_HEAD
仅因为它引用与当前已签出分支HEAD
(此处master
)相同的 SHA1 才具有“签出”标记。
这意味着,如果您执行新的提交:
FETCH_HEAD
不会再有签出的勾号(它仍然会引用最后获取的 SHA1)。这就是为什么我说它不是“真正的”签出(在“新提交后它不会保持签出,因为它是对特定 SHA1的固定引用)
HEAD
并且该master
分支将引用一个新的 SHA1,并保持已签出的勾号。
但是,如果您要直接签出FETCH_HEAD
SHA1(在将其合并到之前master
:Egit 用户指南提到,如果参考尚未签出,您可以这样做),那么:
FETCH_HEAD
仍将“签出”
- 同样的
HEAD
- 但是
master
(或任何其他分支)将不再被签出:这是一个分离的头部情况
如果您要在已签出的基础上进行新的提交FETCH_HEAD
:
FETCH_HEAD
将不再被签出(因为它仍然固定在最后获取的 SHA1 上)
- HEAD 将指向签出的新提交。
- 没有分支会被“签出”:分离的 HEAD。
您需要打开在 顶部完成的签出提交FETCH_HEAD
,并从那里创建一个分支:
![创建一个分支](https://i.stack.imgur.com/lLwFR.png)
(来自文章“ Git 课程:注意一个超然的头脑”)
综上所述:
每次您在FETCH_HEAD
引用上看到“签出刻度”时,这是因为它引用了与当前签出的引用相同的 SHA1(提交或分支)。
这不是因为FETCH_HEAD
它本身被检出:如果你在它之上做了一个新的提交,它就不会再被检出。