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

8
有人能保留远程仓库的情况下解释一下这个吗?

1
没有 git commit --rebase 命令;你是不是想用 git pull --rebase 命令?或者是 git svn dcommit --no-rebase 命令?(一开始忘记加上 git-svn 标签了) - torek
2个回答

10

git pull --rebase 是将开发分支更新到最新状态的方式 - 这些分支通常不向其他人发布(除了可能查看一下),因此重写历史记录并不是一个问题,您也不希望在这样的分支上进行合并等操作。

git merge 执行合并操作;有关详细信息,请参见手册 - 该命令具有大量选项,这里不方便解释太多。

git rebase 执行变基操作,即它会重写历史记录。它将获取您的提交记录,直到它们与其他分支分离的点,暂时删除它们,应用来自其他分支的缺失提交记录,然后重新应用您的提交记录。git rebase 还有交互模式,您可以在其中移除/修改/合并(压缩)某些提交记录。

请访问http://learn.github.com/p/rebasing.html ,以了解有关变基操作工作原理的漂亮图形。


注意:git 2.8(2016年3月)将允许使用git pull --rebase=interactive命令。请参见https://dev59.com/tl0b5IYBdhLWcg3wA9Ab#29717607。 - VonC

7

git rebase允许你将一个分支从它分叉的点上分离出来,并重新放在另一个分支的顶部。相反,git merge仅仅是将另一个分支的更改合并到当前分支中,而不会重新连接历史。

如果没有冲突,合并和变基的结果是相同的,但是历史记录是不同的:

(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将从远程获取更改,并将您的更改重新插入到其之上。它会记录您所做的未在远程上的更改,并从刚刚获取的最后一个更改开始重放它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接