Eclipse 开始理解头部行为 在Github上创建了一个repo(用自述文件初始化) 用Egit克隆了它 看到你的头和头都被检查出来了 转到Github并对自述文件进行了更改 找了零钱 看到那个头被检查出来了,那个头没有。但是FETCH_HEAD确实有自述更新。origin/master的跟踪分支也有更新 将源站/主站的跟踪分支合并到我的本地主站 我看到两个头都被检查出来了

Eclipse 开始理解头部行为 在Github上创建了一个repo(用自述文件初始化) 用Egit克隆了它 看到你的头和头都被检查出来了 转到Github并对自述文件进行了更改 找了零钱 看到那个头被检查出来了,那个头没有。但是FETCH_HEAD确实有自述更新。origin/master的跟踪分支也有更新 将源站/主站的跟踪分支合并到我的本地主站 我看到两个头都被检查出来了,eclipse,egit,Eclipse,Egit,根据这篇文章: FETCH_HEAD是一个短命的ref,用来跟踪刚刚发生的事情 从远程存储库获取 为什么取货后不立即检查取货头?为什么只有在我将源代码的跟踪分支合并到本地主代码后,它才被签出 为什么取头后没有立即签出FETCH\u HEAD?为什么只有在我将源代码的跟踪分支合并到本地主代码后,它才被签出 FETCH\u HEAD本身并不引用任何分支:它只记住最后一次获取的SHA1。 因为它不引用分支,所以它没有真正签出(也不应该签出),否则您将得到一个 但是,将跟踪分支合并到主分支将更新头(指向

根据这篇文章:

FETCH_HEAD是一个短命的ref,用来跟踪刚刚发生的事情 从远程存储库获取

为什么取货后不立即检查取货头?为什么只有在我将源代码的跟踪分支合并到本地主代码后,它才被签出

为什么取头后没有立即签出
FETCH\u HEAD
?为什么只有在我将源代码的跟踪分支合并到本地主代码后,它才被签出

FETCH\u HEAD
本身并不引用任何分支:它只记住最后一次获取的SHA1。
因为它不引用分支,所以它没有真正签出(也不应该签出),否则您将得到一个

但是,将跟踪分支合并到
主分支
将更新
(指向更新的主分支):该分支已签出。
如果合并是a,则签出的分支
HEAD
FETCH-HEAD
将引用相同的SHA1,给人的印象是
FETCH\u HEAD
是“签出的”
(实际上不是)


换句话说,在下图中:

FETCH\u HEAD
带有“checked out”(签出)勾号,只是因为它引用的SHA1与当前签出分支
HEAD
(此处
master

这意味着,如果您执行新的提交,则:

  • FETCH\u HEAD
    将不再具有签出勾号(它仍将引用上次获取的SHA1)。这就是为什么我说它没有“真正”签出(意思是“在新提交后它不会保持签出状态,因为它是对特定SHA1的固定引用)
  • HEAD
    master
    分支将引用新的SHA1,并保持签出勾号
但是,如果您要直接签出
FETCH_HEAD
SHA1(在将其合并到
master
之前:如果引用尚未签出,您可以这样做),那么:

  • FETCH\u HEAD
    仍将“签出”
  • 头部相同
  • 但是
    master
    (或任何其他分支)将不再签出:这是一个
如果要在签出的
FETCH\u HEAD
上进行新的提交:

  • FETCH_HEAD
    将不再签出(因为它在上次提取的SHA1上保持固定)
  • HEAD将指向签出的新提交
  • 不会“检出”分支:分离的头部
您需要在
FETCH\u HEAD
顶部打开签出的commit done,并从那里创建一个分支:

(摘自第“”条)


总之:

每次您在
FETCH\u HEAD
引用上看到“checked out tick”,这是因为它引用了与当前签出的ref相同的SHA1(提交或分支)。

这并不是因为
FETCH\u HEAD
本身已签出:如果您在其上执行新的提交,它将不再签出。

您会说:“因为它不引用分支,所以它未签出…”当然,它在克隆后和合并后立即显示为已签出。(我在原始问题中添加了一个图像。)听起来这可能是一个Egit问题。@mike您需要从“当我在“签出”的基础上进行新提交时会发生什么情况”的角度来了解情况:我更新了我的答案来说明这一点。@mike我添加了一个小结论,总结了为什么
FETCH\u HEAD
显示已签出,但实际上未签出。非常感谢VonC。