如何一次还原多个拉取请求合并并保留历史记录

How to revert multiple pull request merges all at once and preserve history

我有一个案例,Github repo master 当前有一系列单独的拉取请求,这些请求已经合并到 master 中。我想恢复说那些拉取请求合并的最后 20 个,但是从命令行执行并保留历史记录。

一个类似的问题被标记为重复revert multiple merges

但是,已经存在的答案并没有真正解决当您要还原的所有内容都来自一系列全部合并的拉取请求时会发生什么的具体问题。将 -m 选项与 git revert 一起使用对一次合并有好处,对吗?所以我认为答案是没有一个好的方法(从命令行)快速还原一系列已合并的单个拉取请求并保留历史记录?如果我对此有误,请纠正我。如果我必须一次做一个,我还不如使用 Github 控制台并为每个单击还原。

如果你想有一个单一的(以后的)修订版,你可以在其中恢复所有这些合并的更改,你可以这样做:

git checkout <id-of-revision> # use the ID of the revision you would like to get your project back to (in terms of content)
git reset --soft <the-branch> # the branch where we want to add a revision to revert all of that
git commit -m "Reverting"
# If you like the results
git branch -f <the-branch> # move branch pointer to this new revision
git checkout <the-branch>

第一步

先新建一个备份分支,放在一边。 (备份分支) 在要还原的任何地方从 master 或 dev 创建一个新分支。(working-branch)

git revert commitid1

git revert commitid2

git revert commitid3..... 是最好的选择。

不要这样做 git reset --hard commitid 它会把你的索引编入网格。

还原是安全的选择。

我已经完成了 180 次还原提交。

第二步

git log -180 --format=%H --no-merges 使用此命令单独打印所有提交 ID。

它将忽略合并提交 ID。

commitid1 commitid2 commitid3 .....它会这样打印。

复制到sublime ctrl+a -> ctrl +alt + l add

git revert --no-commit commitid1

git revert --no-commit commitid2

git revert --no-commit commitid3

全部复制并粘贴到命令提示符中。您的所有提交都将被还原。现在做一个 git 提交。

然后git推送。 创建一个合并请求到 master。

第三步

如何验证?

创建一个新分支(verify-branch)。

你可以通过

来验证它

git reset -hard commitidX。这是您需要还原到的提交 ID。

git status 它会给你落后于 master 的提交数。

git push -f

现在通过在它们之间创建一个拉取请求来比较这个分支和你的工作分支。你会看到没有变化意味着你的工作分支成功恢复到你正在寻找的版本。