我是git的新手,我正在努力了解壁球和篮板之间的区别。根据我的理解,你在做一次变装时会进行压制。
答案 0 :(得分:319)
git merge --squash
和git rebase --interactive
都可以产生“压扁”提交
但它们有不同的用途。
将在目标分支上生成压缩提交,而不标记任何合并关系
(注意:它不会立即产生提交:您需要额外的git commit -m "squash branch"
)
如果您想完全丢弃源分支(从SO question获取的模式),这非常有用:
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
分支。
在新基础上重播您的部分或全部提交,允许您压缩(或最近“修复”,请参阅此SO question),直接转到:
git checkout tmp
git rebase -i stable
stable
X-------------------G tmp
/
a---b
如果您选择压缩tmp
的所有提交(但是,与merge --squash
相反,您可以选择重播一些,并压缩其他人)。
所以差异是:
merge
未触及您的源分支(此处为tmp
),并在您想要的位置创建一个提交。rebase
允许您继续使用相同的源分支(仍为tmp
):
答案 1 :(得分:111)
合并提交:保留分支中的所有提交,并将它们与基础分支上的提交交错
Merge Squash:保留更改但省略历史记录中的各个提交
Rebase:这会将整个功能分支从主分支的尖端开始,有效地将所有新提交合并到主分区
更多关于here
答案 2 :(得分:73)
合并壁球将树(一系列提交)合并为一个提交。也就是说,它压缩 n 中提交的所有更改提交到单个提交中。
重新定位是重新基础,即为树选择新的基础(父提交)。也许这个多变的术语更清楚:他们称之为移植,因为它只是:为一棵树选择一个新的基础(父提交,根)。
在进行交互式rebase时,您可以选择压缩,选择,编辑或跳过要进行rebase的提交。
希望很清楚!
答案 3 :(得分:9)