反正有没有将几个git提交折叠成一个提交?

时间:2015-11-02 23:12:51

标签: git

我们假设我在每天结束时提交代码。大多数这些提交都是垃圾,我正在保存代码,但大部分时间我都在检查不起作用的不完整代码。完成此功能后,我不希望日志中出现这些损坏的提交。我想做一个有效的最终提交,而不保留每日提交的历史记录。这可能吗?

4 个答案:

答案 0 :(得分:4)

是。一般来说,git称之为“压缩”,并且有很多方法可以做到这一点。我建议的方法是使用交互式rebase。

如果您正在使用“上游”(您推送的存储库,或以其他方式获取您发布的提交),您通常会将其设置为您的分支的上游。然后git rebase -i将为您设置内容。如果没有,你仍然运行git rebase -i,你只需要再添加一个东西,即交互式rebase的提交。例如,在这种情况下,您可以使用git rebase -i HEAD~4来处理最近四次提交。

你将要做的事实上不是变基 - 你不会将提交链从一个起始点移动到另一个起点 - 但git rebase仍然是机制。在进行交互式rebase时,您会得到一个提交列表:

pick 1234567   commit message
pick 2345678   another commit message

Git在这个列表中打开你最喜欢的编辑器,然后你可以根据需要进行调整,然后git尝试重新应用列出的新订单中的提交,以及你对{{1行。

将一行从pick更改为pick会导致该提交与其之前的(line-above)提交一起折叠,此时git会在提交消息上再次打开您的编辑器,以便您可以修改新的(单个)提交的消息,该提交会将两个现有提交压缩在一起。

您也可以更改提交顺序,或省略提交。

请注意,分割提交要困难得多(尽管可以这样做),所以请确保在执行此操作之前确实要将它们压缩在一起。

(rebase进程真正做的是复制每次提交,最后一次提交是在插入任何额外的南瓜或修正后进行的。你的原始提交链仍在存储库中,并且您可以通过分支的“reflog”找到它们。请注意,因为 复制提交,您通常应该只复制和修改您尚未发布的提交。因为没有其他人拥有你未经发表的作品,他们永远不会因为看到这部作品的新旧版本而感到困惑。)

答案 1 :(得分:1)

您可以通过命令git commit --amend来完成工作。

简单地说,像往常一样做第一次提交。 然后通过命令git add <your stuff>打包你的东西以进行下一次提交。最后,使用上面提到的那个,而不是通常的提交。

有关详细信息,请参阅here

答案 2 :(得分:0)

如果要合并来自结帐的所有本地提交,请执行以下操作:

//this will revert your commits but will keep your changes
git revert ...
//and then normally
git commit -m 'New feature'
git push

答案 3 :(得分:0)

确定它是可能的。您正在寻找的是sqashing,可以在使用git rebase

时完成

您只需选择要合并的提交(它们必须是后续的)并要求git在交互式rebase期间压缩它们