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