很多时候,当我开发应用程序时,我会添加日志记录语句,有时候如果它有助于调试,die()
断言等等。在本地测试,我不要犯任何东西给git。当我想通过我的功能分支中的提交将其转移到临时环境时,我必须使用一堆调试类型代码提交它们。最后,当我准备将分支合并到一个发布分支时,我很乐意将这些大量的提交几乎清理/编译成一个提交,并且好像调试语句不是&#39因为我做了最后一次提交来清理它们。
在我的功能分支上完成工作后,是否可以重写git历史记录以将所有这些提交合并到一个干净的提交中?
答案 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)
我发现以下方法最灵活:
git reset commit-id
将分支的提交历史记录一直退回到ID为commit-id
的提交,同时将文件更改保留为未提交。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
的深入文章