“最简单”总是有点棘手。交互式变基可以让你压扁一切,并且在某种程度上是“容易的”。
另一种看起来有点复杂的“简单”方法是使用“壁球合并”(这根本不是真正的合并,但确实使用与 相同的底层代码git merge
,因此使用相同的命令完成)。假设您在devel
上游为origin/devel
. 首先,我们将重命名devel
为devel-full
以表明它是具有完整提交序列的那个。然后我们将创建一个新的devel
trackingorigin/devel
和 "squash-merge" devel-full
:
git branch -m devel devel-full
git checkout --track origin/devel
git merge --squash devel-full
git commit
您必须单独git commit
禁止--squash
通常git merge
进行的提交。
然而,第三种简单(?)但有点可怕的方法是查看提示版本并提交它。同样,假设devel
像以前一样,我们将“完全开发”分支名称移开并创建一个新的本地分支以进行新的提交。不过,这一次git merge --squash
我们之前使用了两个命令,而不是git commit
:
git branch -m devel devel-full
git checkout --track origin/devel
git rm -rf . # assumes you're in the top directory
git checkout devel-full -- .
git commit
计划(在索引/暂存区域中)要删除的git rm -rf .
每个文件,然后git checkout devel-full -- .
告诉 git 用devel-full
. 所以这意味着“为下一次提交制作树,看起来与”尖端的树完全一样devel-full
。
(remove-and-re-create 方法适用于不适用的一种情况merge --squash
:具体而言,它适用于用另一个分支的尖端“替换”一个分支的尖端,即使两个分支不相关因此不合并 -能。否则merge --squash
会短一步,而且绝对不会看起来那么吓人,至少!)
这两种其他“简单”(?)方式都为您提供了具有完整开发历史的分支。如果你想要它,太好了!如果没有,您必须将其删除。