Git拉——帮助说:

在默认模式下,git pull是git fetch的简写,后面跟着git merge FETCH_HEAD。

FETCH_HEAD是什么? git拉取过程中合并了什么?


当前回答

FETCH_HEAD是对最后一次获取的尖端的引用,无论该获取是直接使用fetch命令启动的,还是作为拉取的一部分。FETCH_HEAD的当前值存储在。git文件夹中一个名为FETCH_HEAD的文件中。

所以如果我发出:

git fetch https://github.com/ryanmaxwell/Fragaria

FETCH_HEAD可以包含

3cfda7cfdcf9fb78b44d991f8470df56723658d3        https://github.com/ryanmaxwell/Fragaria

如果我将远程回购配置为远程跟踪分支,那么我可以使用跟踪分支的合并来跟踪我的fetch。如果我不这样做,我可以合并尖端的最后获取直接使用FETCH_HEAD。

git merge FETCH_HEAD

其他回答

Git pull是一个fetch和merge的组合。当git获取发生时,它会注意到它在FETCH_HEAD中获取的内容的头提交(只是一个在.git中同名的文件),然后这些提交被合并到你的工作目录中。

FETCH_HEAD是对最后一次获取的尖端的引用,无论该获取是直接使用fetch命令启动的,还是作为拉取的一部分。FETCH_HEAD的当前值存储在。git文件夹中一个名为FETCH_HEAD的文件中。

所以如果我发出:

git fetch https://github.com/ryanmaxwell/Fragaria

FETCH_HEAD可以包含

3cfda7cfdcf9fb78b44d991f8470df56723658d3        https://github.com/ryanmaxwell/Fragaria

如果我将远程回购配置为远程跟踪分支,那么我可以使用跟踪分支的合并来跟踪我的fetch。如果我不这样做,我可以合并尖端的最后获取直接使用FETCH_HEAD。

git merge FETCH_HEAD

FETCH_HEAD是一个短命的引用,用于跟踪刚刚从远程存储库获取的内容。Git pull首先调用Git fetch,在正常情况下从远程获取一个分支;FETCH_HEAD指向这个分支的顶端(它存储提交的SHA1,就像分支一样)。git pull然后调用git merge,将FETCH_HEAD合并到当前分支。

结果正是您所期望的:适当远程分支顶端的提交合并到当前分支顶端的提交。

这有点像不带参数的git获取(或git远程更新),更新所有远程分支,然后运行git merge origin/<branch>,但在内部使用FETCH_HEAD来引用所获取的任何单个引用,而不需要命名东西。

正如Jonathan的回答中提到的,FETCH_HEAD对应于文件.git/FETCH_HEAD。通常,该文件看起来是这样的:

71f026561ddb57063681109aadd0de5bac26ada9                        branch 'some-branch' of <remote URL>
669980e32769626587c5f3c45334fb81e5f44c34        not-for-merge   branch 'some-other-branch' of <remote URL>
b858c89278ab1469c71340eef8cf38cc4ef03fed        not-for-merge   branch 'yet-some-other-branch' of <remote URL>

注意除了一个分支之外的所有分支都标记为not-for-merge。奇怪的是在取回之前检出的分支。总之:FETCH_HEAD本质上对应于当前签出的分支的远程版本。

如果可能的话,让我为之贡献力量。

在图像上,我已经向REMOTE询问了我正在工作的分支是否有一些变化。 FETCH已经告诉我*分支后台-> FETCH_HEAD 然后我要求拉,试图把所有新的远程(GITHUB)到我的本地分支(它有相同的名字back_end)

GIT告诉我——>> FETCH_HEAD,这意味着所有东西都已经更新了,有任何东西要从REMOTE BRANCH更新,与FETCH指令之前告诉我的信息相同。