git FETCH_HEAD 短期参考

Bre*_*min 3 git

  1. 在这里读到git FETCH_HEAD 是一个短暂的参考。git FETCH_HEAD 参考的生命周期是多少?

  2. 当我这样做时git fetch origin,在这种情况下会更新许多远程跟踪分支。FETCH_HEAD 将指向哪里?

Edw*_*son 5

  1. 它根本不是真正的参考。引用是指向单个提交的指针(或者,在 的情况下HEAD,是分支名称)。 FETCH_HEAD取而代之的是关于上次获取的分支的 git 元数据。它一直存在,直到被另一个fetch重写

  2. 它不是真正的参考,包含有关获取的远程跟踪信息的所有信息。

当您运行git merge FETCH_HEAD(或通过运行隐式运行git pull)时,git 会特别对待它,而不是像普通引用一样。相反,该FETCH_HEAD文件将被查询,并且 git 将寻找一个没有not-for-merge赋予它的特殊标记的分支。该分支将是用于合并的分支。(Git 根据与您的git fetch调用相对应的远程跟踪分支或您运行它时所在的分支来确定此分支。)

请注意,在 中FETCH_HEAD,还包括有关远程分支的详细信息,这允许 git 为合并提交创建一条消息,该消息详细说明该分支来自何处。(例如,“ Merge of branch 'master' of https://my.visualstudio.com/my/repository”)。

FETCH_HEAD与大部分 git 存储库元数据一样,只是一个文本文件;阅读它以了解每次获取后它的变化非常有启发性。(你可以看到,例如,你链接到的答案是非常不正确的,这FETCH_HEAD确实包含单个分支的信息,它包含了所有的遥控器上的树枝。)

  • 是的,你是对的,这正是 `git pull` 所做的。`FETCH_HEAD` 包括制表符分隔的字段,其中之一是指示应该合并提取的哪个分支。(要合并的分支有一个值为 `for-merge` 的字段,在所有其他分支中它将为空。)`git merge FETCH_HEAD` 专门解析此信息并且不会将 `FETCH_HEAD` 视为正常分支。 (2认同)