如何将多个提交还原为单个提交的一部分

时间:2012-05-02 14:16:18

标签: git revert

这不是一个主要问题,只是我想知道是否可能。

假设我们有两个提交,abcd123wxyz789,这些提交发生在非相邻的,分开的地方,远在回购历史中。现在让我们说我们想要还原它们。做

git revert abcd123 wxyz789

会导致两次单独的提交,一次恢复abcd123,另一次恢复wxyz789

这一切都很好,但是如果我们想要在两个提交中修复的错误在逻辑上是链接的,并且出于自我文档的目的,我们想要进行一次包含一个单独的“我打破了一些东西所以现在我正在恢复文件x,y和z “评论?有没有这样做的git命令?

(我当然知道有可能创建一个提交,我只需手动修复所有更改然后推送。这对于所有不良原因都是痛苦的。)

3 个答案:

答案 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命令会创建一个提交。