如何将多个提交合并为一个而不会丢失历史记录

时间:2011-05-31 09:40:39

标签: git git-branch git-commit

我在一个分支中有多个提交。当我推送这些提交以进行代码审查时,我们的代码审查工具会为每个提交创建一个审核。

为了避免这种情况,我想将多个提交合并到一个提交中。与此同时,我不想失去承诺的历史。是否可以仅为审查创建新分支,并将我的主分支中的所有提交合并到我的审核分支中的单个提交中?我该怎么做?

2 个答案:

答案 0 :(得分:6)

不希望这样做。从你如何做出承诺的意义上的实际历史是毫无价值的。适当大小的审核块很有趣,所以只需rebase -i您的工作分支将提交组合成可管理大小和最重要的逻辑块,发布它们以便查看并忘记原始历史记录。

也就是说,要结合提交,您可以使用:

git merge --squash
Git不会丢掉历史。它实际上并没有在rebase中执行此操作,但在这种情况下,历史记录的先前版本只能通过“reflog”访问,并且只有当您的reflogs到期时(IIRC默认为90天),它最终将无法访问,git gc将丢弃它。但是使用壁球,原始分支只是保留在那里,您仍然可以从reflog命名修订版。

但是,审核历史记录将通过审核工具合并到中央主页,并且没有人会看到您的原始历史记录。你可以保留它,但它与官方版本无关,无论如何都没有人会看到它。

答案 1 :(得分:5)

我不知道您的评论工具,但这可能有效

git checkout review
git merge --squash master

http://www.kernel.org/pub/software/scm/git/docs/git-merge.html