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

这不是什么大问题,我只是想知道这是否可行。

假设我们有两个提交,abcd123wxyz789,它们发生在不相邻的、独立的地方,在回购历史的很久以前。现在假设我们想恢复它们。做什么

git revert abcd123 wxyz789

将导致两个单独的提交,一个恢复 abcd123,另一个恢复 wxyz789

这一切都很好,但是如果我们想要修复的两个提交中的错误在逻辑上是相关联的,并且为了自我文档的目的,我们想要做一个包含一个“ 我破坏了一些东西,所以现在我恢复文件 x,y 和 z”注释的单个提交呢?有没有一个 git 命令可以做到这一点?

(我当然知道创建一个提交是可能的,我只需要手动修复所有的更改,然后推送。由于种种显而易见的原因,这种做法令人痛苦。)

56525 次浏览

You can do:

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

... and then write an appropriate commit message describing the combined effect of reverting both commits.

In case of complicated reverts, which changes each other, the revert --no-commit might be problematic.

My simple solution was to do real revert, and the squash:

git revert <all commits>
git rebase -i

And then mark all the reverts as squash, except the first one, to create a single commit.

git revert -n <commits>
git commit

The first command will do all the reverts without create any commits and stage the final result (the -n option). After that, the commit command creates a single commit.