清理git中的调试提交

问题描述 投票:2回答:3

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

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

git version-control
3个回答
3
投票

只要您没有发布您的更改(git push),您就可以使用git rebase安全地重写历史记录

你可以git rebase -i <commit>~1 commit是你想要开始清理的第一个提交,并且在交互模式下,你可以squash提交以某种方式将它们合并为一个大提交。你可以在这里找到关于这个主题的好文档:7.6 Git Tools - Rewriting History

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

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

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

希望这可以帮助!


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


0
投票

我知道它已经过时了,你现在可能已经解决了,只想添加我的2cents。

正如我理解git并自己做的那样,最干净的选择似乎是交互式rebase(正如@paulo bu所提到的那样,但是当你第一次将你的staging分支合并到你的发布分支中时,你可以毫无问题地进行rebase,只要它没有被推了。

例如,一旦提交了所有内容:

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的深度文章

© www.soinside.com 2019 - 2024. All rights reserved.