“最简单”的方式有些棘手。交互式变基将让您压缩所有内容,并根据某种标准来说是“简单”的。
另一种“简单”的方法,看起来有点复杂,是使用“压缩合并”(实际上并不是真正的合并,但确实使用与git合并相同的底层代码,因此可以使用相同的命令)。 假设您在分支
devel
上,其上游是
origin/devel
。 首先,我们将将
devel
重命名为
devel-full
,以表示它是具有完整提交序列的分支。 然后,我们将创建一个新的
devel
跟踪
origin/devel
,并“压缩合并”
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
分支名称,我们将 "full develoment" 分支名移动到一旁,并创建一个新的本地分支来进行新的提交。不过这次,在执行
git commit
命令之前,我们需要使用两个命令,而不是使用
git merge --squash
:
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
分支顶部的树完全相同”。
(删除并重新创建的方法适用于
merge --squash
无法解决的一种情况:即将一个分支的末尾替换为另一个分支的末尾,即使这两个分支不相关并且因此不能合并。否则,
merge --squash
更简单,至少看起来不那么可怕!)
这些其他“容易”的方式都让你拥有完整的开发历史记录的分支。如果需要,那很好!如果不需要,则必须将其删除。