我是新来的,我在试着理解壁球和rebase的区别。正如我所理解的那样,你在做rebase时执行了一个壁球。
合并挤压将树(一系列提交)合并为单个提交。也就是说,南瓜在n中所做的所有更改都提交到单个提交中。
重基就是重基,即为树选择一个新的基(父提交)。也许这种变化的术语更明确:他们称之为移植,因为它只是:为树选择一个新的地面(父提交,根)。
当做一个交互式的重基时,你可以选择压缩,选择,编辑或跳过你要重基的提交。
希望你讲清楚了!
git merge --squash和git rebase --interactive都可以产生&;提交。但它们的用途不同。
git merge --squash
git rebase --interactive
git merge --squash abranch
将在目标分支上产生一个压缩提交,而不标记任何合并关系。 (注意:它不会立即产生一个提交:你需要一个额外的git commit -m "squash branch")
git commit -m "squash branch"
如果你想完全丢弃源分支,这是很有用的,从(schema taken from 所以问题):
git checkout stable X stable / a---b---c---d---e---f---g tmp
:
git merge --squash tmp git commit -m "squash tmp" # In the following graph, G is c--d--e--f--g squashed together X-------------G stable / a---b---c---d---e---f---g tmp
然后删除tmp分支。
tmp
注:#EYZ0有一个--commit选项,但不能与--squash一起使用。从来没有可以同时使用--commit和--squash。 自Git 2.22.1(2019年Q3)以来,这种不兼容性是显式的:
--commit
--squash
参见提交1 d14d0c(2019年5月24日)。 (由滨野朱尼奥——gitster——在提交33 f2790中合并,2019年7月25日)
gitster
merge:用--squash拒绝--commit
merge
以前,当--squash被提供时,'option_commit'是静默的 下降了。这可能会让试图重写的用户感到惊讶 . . .
option_commit
# EYZ0 # EYZ1现在包括:
if (option_commit > 0) die(_("You cannot combine --squash with --commit."));
在一个新的基础上重放你的部分或全部提交,允许你压缩(或者最近的"修复",看这个所以问题),直接到:
git checkout tmp git rebase -i stable stable X----------------G tmp / a---b
如果您选择压缩tmp的所有提交(但是,与merge --squash相反,您可以选择重放一些,并压缩其他)。
merge --squash
所以区别在于:
squash
rebase
合并提交:保留分支中的所有提交,并将它们与基本分支上的提交交织
Merge Squash:保留更改,但从历史记录中省略个人提交 # EYZ0 < / p >
Rebase:这将整个特征分支移动到主分支的顶端,有效地将所有新提交合并到主分支中
更多关于在这里
前两张图来自关于拉请求合并在GitHub Docs
让我们从下面的例子开始:
现在我们有3个选项来合并特性分支到主分支的变化:
您可以在下面找到主分支将如何处理每一个。
在所有情况下: 我们可以安全地删除特性分支.