git pull和git fetch + rebase有什么区别

时间:2013-11-17 08:40:41

标签: git

我正在开发一个使用GIT作为版本控制系统的项目。在项目的开发过程中,它说

  

不要使用“git pull”,因为这会导致合并,并随着时间的推移创建一个非常混乱的历史记录。改为使用git fetch和git rebase。

基本上我知道git pull实际上git fetch + git merge。并且git rebase将保持提交图清洁,因为在git rebase之后,本地分支变为与远程分支在同一行。

但我还是不明白为什么git pull会创造一个非常混乱的历史?有人可以向我解释一下吗?

2 个答案:

答案 0 :(得分:3)

Fetch + rebase将创建线性历史记录(每个提交只有一个父项),如

last common commit <- remote commit <- remote commit <- local commit

拉,如果在远程分支和你的本地都有一些变化将创建凌乱的历史(提交可以有两个父母 - 看看“合并提交”)像

                      remote commit <- remote commit
last common commit <-                                <- merge commit
                      local commit

答案 1 :(得分:1)

您可以查看关于git fetch + rebasegit pull here之间的官方文​​档。但与git pull相比,前者通常是更好的方法。 git pull获取当前分支并立即合并它。 (修复它可能会非常讨厌你会遇到冲突)。

当rebase将当前分支的头部调整为正在重新分配的分支时。因此,您将获得线性历史记录。

因此,在处理多个开发人员为存储库或分支做出贡献的设置时,始终要进行重新定位。