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

这不是主要问题,只是我想知道是否可能的事情。

假设我们有两个提交2617114207623578578和wxyz789,它们发生在回购历史的很远的不相邻且分开的地方。 现在,我们要还原它们。 在做

git revert abcd123 wxyz789

将导致两次单独的提交,一个提交abcd123,而另一个还原wxyz789

一切都很好,但是,如果我们要在两次提交中修复的错误在逻辑上是联系在一起的,并且出于自我记录的目的,我们希望进行一次提交,其中包含一个“我现在破坏了某件事,那么现在该怎么办?” 我要还原文件x,y和z“评论? 是否有执行此操作的git命令?

(我当然知道可以创建一个提交,而我只需手动修复所有更改然后再进行推送即可。由于所有令人讨厌的原因,这很痛苦。)

JimmidyJoo asked 2019-11-16T18:44:58Z
3个解决方案
71 votes

你可以做:

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

...,然后编写适当的提交消息,说明还原两个提交的综合效果。

Mark Longair answered 2019-11-16T18:45:26Z
37 votes

如果是复杂的还原,并且彼此转换,则squash可能会出现问题。

我的简单解决方案是进行真实还原,然后压扁:

git revert <all commits>
git rebase -i

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

ElyashivLavi answered 2019-11-16T18:46:03Z
22 votes
git revert -n <commits>
git commit

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

lyu answered 2019-11-16T18:46:27Z
translate from https://stackoverflow.com:/questions/10415565/how-to-revert-multiple-commits-as-part-of-a-single-commit