git pull --rebase,git rebase和git merge之间的区别

时间:2012-04-27 05:35:45

标签: git git-svn

任何人都可以解释这一点,甚至记住远程存储库吗?

2 个答案:

答案 0 :(得分:8)

git pull --rebase是你想要让你的开发分支更新的方法 - 那些分支通常不会发布给其他人(除了可能看看它)所以重写历史不是问题而你真的不希望在这样的分支中合并等。

git merge执行合并;有关详细信息,请参阅联机帮助页 - 该命令有很多选项,在这里解释得太多了。

git rebase执行rebase,即重写历史记录。它将使您的提交达到与其他分支不同的程度,暂时删除它们,从另一个分支应用缺少的提交,然后重新应用您的提交。 git rebase还有一个交互模式,您可以在其中删除/修改/合并(压缩)某些提交。

请查看http://learn.github.com/p/rebasing.html,了解有关rebase如何运作的精彩图表。

答案 1 :(得分:6)

git rebase允许您从分支点分离分支,并将其重新插入另一分支的顶部。 git merge只是简单地合并当前分支中另一个分支的更改,而不会重新插入历史记录。

如果没有冲突,则merge和rebase之间的结果相同,但历史记录不同:

(merge branch on master):
master    --A--B--C--E
                   /
branch          --D

(rebase branch onto master):
master     --A--B--C--D'

在第一种情况下,合并创建branch分支被合并到master,从而导致创建合并提交E。在第二种情况下,只需将D重新插入master,即可创建另一个提交,D'

git pull --rebase将从远程获取更改,并在其上重新设置(重新插入)您的更改。它将从字面上记录您所做的不在遥控器上的更改,并从刚刚提取的最后一次更改开始重播它们。