在git中清理调试提交

3
很多时候在开发应用程序时,我会添加日志语句,有时如果需要调试,还会添加die()断言等。在本地测试时,我不必将任何内容提交到git中。但是当我想将这些提交到我的功能分支的暂存环境中时,我必须将它们与一堆调试类型的代码一起提交。最终,当我准备将该分支合并到发布分支时,我希望这些众多的提交几乎被清理/编译成一个提交,好像没有调试语句一样,因为我做了一个最终的提交来清理它们。
是否可以重写git历史记录,将所有这些提交合并为一个干净的提交,一旦我完成了对我的功能分支的工作?
3个回答

3
只要您尚未发布更改(git push),您就可以使用git rebase安全地重写历史记录。您可以使用git rebase -i <commit>~1,其中commit是您想要开始清理的第一个提交,在交互模式下,您可以squash提交以将它们合并成一个大的提交。您可以在此处找到有关此主题的良好文档:7.6 Git工具-重写历史记录。此外,请看一下这个, 这是我制作的一个小钩子,用于防止调试语句被提交,也许您会发现它有用。 < p > 编辑:我看到你提到需要将更改移动到临时区。如果这意味着推送,那么如果没有其他人拉取您的更改,则重写历史可能会有问题。重写历史会更改您提交的"sha",因此团队的其他成员可能会得到重复的提交或许多冲突。

另一方面,如果您推送到某个地方,但只有您使用了该临时区,则可以在本地重写历史并再次使用git push -f进行推送。它将使用您的本地更改更新分支。

希望这可以帮助您!


0

我知道这已经是老问题了,你可能已经解决了,只是想加上我的意见。

就我理解的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


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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接