73

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

假设我们有两个提交,abcd123wxyz789,它们发生在不相邻的不同位置,远在回购的历史上。现在假设我们要还原它们。正在做

git revert abcd123 wxyz789

将导致两个单独abcd123的提交,一个 reverting 和另一个 reverting wxyz789

这一切都很好,但是如果我们要在两个提交中修复的错误在逻辑上是相关联的,并且出于自我文档的目的,我们希望进行一个包含一个“我现在破坏了一些东西”的单个提交我正在恢复文件 x、y 和 z " 评论?是否有执行此操作的 git 命令?

(我当然知道可以创建一个提交,我只需手动修复所有更改然后推送。由于所有明显的原因,这很痛苦。)

4

3 回答 3

90

你可以做:

git revert abcd123
git revert --no-commit wxyz789
git commit --amend

...然后编写适当的提交消息,描述恢复两个提交的综合效果。

于 2012-05-02T14:25:07.403 回答
43

在复杂的还原的情况下,它们会相互改变,这revert --no-commit可能是有问题的。

我的简单解决方案是做真正的还原,还有壁球:

git revert <all commits>
git rebase -i

然后将除第一个之外的所有还原标记为squash,以创建单个提交。

于 2013-10-23T08:47:12.900 回答
24
git revert -n <commits>
git commit

第一个命令将执行所有还原而不创建任何提交并暂存最终结果(-n 选项)。之后,commit 命令创建一个提交。

于 2015-12-08T02:08:20.920 回答