清理git中的调试提交

时间:2015-01-07 19:24:53

标签: git version-control

很多时候,当我开发应用程序时,我会添加日志记录语句,有时候如果它有助于调试,die()断言等等。在本地测试,我不要犯任何东西给git。当我想通过我的功能分支中的提交将其转移到临时环境时,我必须使用一堆调试类型代码提交它们。最后,当我准备将分支合并到一个发布分支时,我很乐意将这些大量的提交几乎清理/编译成一个提交,并且好像调试语句不是&#39因为我做了最后一次提交来清理它们。

在我的功能分支上完成工作后,是否可以重写git历史记录以将所有这些提交合并到一个干净的提交中?

3 个答案:

答案 0 :(得分:3)

只要您尚未发布更改(git push),就可以使用git rebase

安全地重写历史记录

您可以git rebase -i <commit>~1 commit是您要开始清理的第一个提交,并且在交互模式下,您可以squash以某种方式提交合并< / em>他们成了一个大提交。您可以在此处找到有关此主题的良好文档:7.6 Git Tools - Rewriting History

另外,take a look into this是我为阻止调试语句提交而做的一个小钩子,也许你发现它很有用。

编辑:我看到你提到你需要将更改移动到临时区域。如果这意味着推动,那么重写历史可能会有问题,除非没有其他人提取您的更改。重写历史记录会改变您的提交&#34; sha&#34;,因此团队的其他成员可能会以重复提交或许多冲突结束。

另一方面,如果你推到某个地方,但只有你正在使用那个临时区域,那么你可以在本地重写你的历史记录并再次推送git push -f。它将使用您的本地更改更新分支。

希望这有帮助!

答案 1 :(得分:0)

我发现以下方法最灵活:

  1. 使用git reset commit-id将分支的提交历史记录一直退回到ID为commit-id的提交,同时将文件更改保留为未提交。
  2. (可选)进行一些其他更改(例如,删除调试代码)。
  3. 将更改重新提交到干净的提交集中。使用git gui之类的GUI工具,您甚至可以从文件中选择并提交单独的行。

此处是有关该过程的详细指南: https://github.com/jleben/code-review-prep-guide/blob/master/guide.md

答案 2 :(得分:0)

我知道它已经很旧了,您现在可能已经解决了,只想添加我的2美分。

据我所知,git是我自己做的,最干净的选择似乎是以交互方式进行基准调整(如@paulo bu所述,但是,当您首次将登台分支合并到发布分支中时,只要没有问题,就可以进行基准调整因为它没有被推。

示例,一旦所有内容都已提交:

staging$ git checkout release
release$ git merge staging
release$ git rebase -i
release$ git push

这当然有点简化了,但是没有发生任何冲突。

在合并之前,如果您的同事也都在release上进行工作,则可能需要进行所有上游更改。.但是随后可能还会发生。

有关重新定购https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase

的深入文章