在查看git fetch的文档时,我注意到了--append选项。文档说这样做:
将获取的引用的引用名称和对象名称附加到.git / FETCH_HEAD的现有内容中。如果没有此选项,.git / FETCH_HEAD中的旧数据将被覆盖。
这有什么用?根据我的理解,FETCH_HEAD会跟踪刚刚获取的远程分支的提示,以便在它们上调用merge或rebase。
为什么附加到列表很重要?为什么保持旧的获取头很重要?
答案 0 :(得分:5)
有时您可能需要一次获取一个分支:
$ git fetch origin master
# FETCH_HEAD now points to origin/master
$ cat .git/FETCH_HEAD
1234567890abcdef branch 'master' of https://git.example.com/someproject
# Let's fetch another branch
$ git fetch origin dev
# FETCH_HEAD is overwritten and points to origin/dev
$ cat .git/FETCH_HEAD
fedcba0987654321 branch 'dev' of https://git.example.com/someproject
# Fetch origin/master again, preserving the previous contents of .git/FETCH
$ git fetch --append origin master
# FETCH_HEAD now contains pointers to both origin/master and origin/dev
$ cat .git/FETCH_HEAD
fedcba0987654321 branch 'dev' of https://git.example.com/someproject
1234567890abcdef branch 'master' of https://git.example.com/someproject
类似地,您可以从多个远程站点获取数据,并将结果累积在.git/FETCH_HEAD
中,而不是仅包含最新git fetch
的结果。
然后,您可以通过一次git merge FETCH_HEAD
操作合并在.git/FETCH_HEAD
中注册的所有分支 1 :
如果指定了
FETCH_HEAD
(并且没有其他提交),则先前通过git fetch进行合并而在.git/FETCH_HEAD
文件中记录的分支将合并到当前分支。
1 与单独合并每个分支相比,这是否是一个好习惯,不在此答案的范围内。