git fetch命令中的--append选项有什么用?

时间:2018-02-26 23:25:14

标签: git git-fetch

在查看git fetch的文档时,我注意到了--append选项。文档说这样做:

  

将获取的引用的引用名称和对象名称附加到.git / FETCH_HEAD的现有内容中。如果没有此选项,.git / FETCH_HEAD中的旧数据将被覆盖。

这有什么用?根据我的理解,FETCH_HEAD会跟踪刚刚获取的远程分支的提示,以便在它们上调用merge或rebase。

为什么附加到列表很重要?为什么保持旧的获取头很重要?

1 个答案:

答案 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 与单独合并每个分支相比,这是否是一个好习惯,不在此答案的范围内。