Eclipse 开始理解头部行为 在Github上创建了一个repo(用自述文件初始化) 用Egit克隆了它 看到你的头和头都被检查出来了 转到Github并对自述文件进行了更改 找了零钱 看到那个头被检查出来了,那个头没有。但是FETCH_HEAD确实有自述更新。origin/master的跟踪分支也有更新 将源站/主站的跟踪分支合并到我的本地主站 我看到两个头都被检查出来了
根据这篇文章: FETCH_HEAD是一个短命的ref,用来跟踪刚刚发生的事情 从远程存储库获取 为什么取货后不立即检查取货头?为什么只有在我将源代码的跟踪分支合并到本地主代码后,它才被签出 为什么取头后没有立即签出Eclipse 开始理解头部行为 在Github上创建了一个repo(用自述文件初始化) 用Egit克隆了它 看到你的头和头都被检查出来了 转到Github并对自述文件进行了更改 找了零钱 看到那个头被检查出来了,那个头没有。但是FETCH_HEAD确实有自述更新。origin/master的跟踪分支也有更新 将源站/主站的跟踪分支合并到我的本地主站 我看到两个头都被检查出来了,eclipse,egit,Eclipse,Egit,根据这篇文章: FETCH_HEAD是一个短命的ref,用来跟踪刚刚发生的事情 从远程存储库获取 为什么取货后不立即检查取货头?为什么只有在我将源代码的跟踪分支合并到本地主代码后,它才被签出 为什么取头后没有立即签出FETCH\u HEAD?为什么只有在我将源代码的跟踪分支合并到本地主代码后,它才被签出 FETCH\u HEAD本身并不引用任何分支:它只记住最后一次获取的SHA1。 因为它不引用分支,所以它没有真正签出(也不应该签出),否则您将得到一个 但是,将跟踪分支合并到主分支将更新头(指向
FETCH\u HEAD
?为什么只有在我将源代码的跟踪分支合并到本地主代码后,它才被签出
FETCH\u HEAD
本身并不引用任何分支:它只记住最后一次获取的SHA1。因为它不引用分支,所以它没有真正签出(也不应该签出),否则您将得到一个 但是,将跟踪分支合并到
主分支
将更新头
(指向更新的主分支):该分支已签出。如果合并是a,则签出的分支
HEAD
和FETCH-HEAD
将引用相同的SHA1,给人的印象是FETCH\u HEAD
是“签出的”(实际上不是)
换句话说,在下图中:
FETCH\u HEAD
带有“checked out”(签出)勾号,只是因为它引用的SHA1与当前签出分支HEAD
(此处master
)
这意味着,如果您执行新的提交,则:
将不再具有签出勾号(它仍将引用上次获取的SHA1)。这就是为什么我说它没有“真正”签出(意思是“在新提交后它不会保持签出状态,因为它是对特定SHA1的固定引用)FETCH\u HEAD
和HEAD
分支将引用新的SHA1,并保持签出勾号master
FETCH_HEAD
SHA1(在将其合并到master
之前:如果引用尚未签出,您可以这样做),那么:
仍将“签出”FETCH\u HEAD
- 与
头部相同
- 但是
(或任何其他分支)将不再签出:这是一个master
FETCH\u HEAD
上进行新的提交:
将不再签出(因为它在上次提取的SHA1上保持固定)FETCH_HEAD
- HEAD将指向签出的新提交
- 不会“检出”分支:分离的头部
FETCH\u HEAD
顶部打开签出的commit done,并从那里创建一个分支:
(摘自第“”条)
总之: 每次您在
FETCH\u HEAD
引用上看到“checked out tick”,这是因为它引用了与当前签出的ref相同的SHA1(提交或分支)。这并不是因为
FETCH\u HEAD
本身已签出:如果您在其上执行新的提交,它将不再签出。您会说:“因为它不引用分支,所以它未签出…”当然,它在克隆后和合并后立即显示为已签出。(我在原始问题中添加了一个图像。)听起来这可能是一个Egit问题。@mike您需要从“当我在“签出”的基础上进行新提交时会发生什么情况”的角度来了解情况:我更新了我的答案来说明这一点。@mike我添加了一个小结论,总结了为什么FETCH\u HEAD
显示已签出,但实际上未签出。非常感谢VonC。