这不是一个主要问题,只是我想知道是否可能。
假设我们有两个提交,abcd123
和wxyz789
,这些提交发生在非相邻的,分开的地方,远在回购历史中。现在让我们说我们想要还原它们。做
git revert abcd123 wxyz789
会导致两次单独的提交,一次恢复abcd123
,另一次恢复wxyz789
。
这一切都很好,但是如果我们想要在两个提交中修复的错误在逻辑上是链接的,并且出于自我文档的目的,我们想要进行一次包含一个单独的“我打破了一些东西所以现在我正在恢复文件x,y和z “评论?有没有这样做的git命令?
(我当然知道有可能创建一个提交,我只需手动修复所有更改然后推送。这对于所有不良原因都是痛苦的。)
答案 0 :(得分:71)
你可以这样做:
git revert abcd123
git revert --no-commit wxyz789
git commit --amend
...然后编写一个适当的提交消息,描述恢复两个提交的综合效果。
答案 1 :(得分:35)
如果复杂的还原相互更改,revert --no-commit
可能会出现问题。
我的简单解决方案是做真正的还原和壁球:
git revert <all commits>
git rebase -i
然后将所有恢复标记为squash
(第一个除外),以创建单个提交。
答案 2 :(得分:21)
git revert -n <commits>
git commit
第一个命令将执行所有恢复,而不创建任何提交并暂存最终结果(-n选项)。之后,commit命令会创建一个提交。