在git中,合并有什么区别
我是git的新手,我试图理解一个壁球和rebase之间的区别。 据我了解,你在做rebase时做一个壁球。
这两个git merge --squash
和git rebase --interactive
可以产生一个“压扁”的提交。
但他们服务于不同的目的。
git merge --squash abranch
将在目标分支上产生压扁的提交,而不标记任何合并关系。
(注意:它不会立即产生提交:您需要额外的git commit -m "squash branch"
)
如果你想完全抛弃源代码分支,从(来自SO问题的模式)开始:
git checkout stable
X stable
/
a---b---c---d---e---f---g tmp
至:
git merge --squash tmp
git commit -m "squash tmp"
X-------------------G stable
/
a---b---c---d---e---f---g tmp
然后删除tmp
分支。
git rebase --interactive
在新的基础上重放你的一些或全部提交,允许你压缩(或者最近的“修复”,看到这个问题),直接进入:
git checkout tmp
git rebase -i stable
stable
X-------------------G tmp
/
a---b
如果你选择merge --squash
tmp
所有提交(但是,与merge --squash
相反,你可以选择重播一些, merge --squash
其他)。
所以差异是:
merge
不会触及你的源代码分支(这里是tmp
)并在你想要的地方创建一个单独的提交。 rebase
允许你继续在同一个源分支 (仍然是tmp
): 合并压缩将一棵树(一系列提交)合并为一次提交。 也就是说,它将在n次提交中进行的所有更改压缩到一次提交中。
重定基础是重新基础的,也就是为树选择一个新的基础(父提交)。 也许这个术语更清晰:他们称之为移植,因为它只是:为树选择一个新的基础(父提交,根)。
在进行交互式重新分配时,您可以选择压扁,选择,编辑或跳过您将要分配的提交。
希望很清楚!
合并提交:保留分支中的所有提交,并在基本分支上提交它们
合并壁球:保留更改但省略历史的单个提交
Rebase:这将整个特性分支移动到主分支的顶端,有效地将所有新的提交合并到主分支中
更多关于这里
链接地址: http://www.djcxy.com/p/49301.html