“最简单”总是有点棘手。交互式变基可以让你压扁一切,并且在某种程度上是“容易的”。
另一种看起来有点复杂的“简单”方法是使用“壁球合并”(这根本不是真正的合并,但确实使用与 相同的底层代码git merge,因此使用相同的命令完成)。假设您在devel上游为origin/devel. 首先,我们将重命名devel为devel-full以表明它是具有完整提交序列的那个。然后我们将创建一个新的develtrackingorigin/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会短一步,而且绝对不会看起来那么吓人,至少!)
这两种其他“简单”(?)方式都为您提供了具有完整开发历史的分支。如果你想要它,太好了!如果没有,您必须将其删除。