我有一个案例,Github repo master当前有一系列单独的拉取请求,这些请求已经合并到master中。我想恢复,比如说最后20个拉请求合并,但从命令行执行并保留历史。
类似的问题被标记为重复还原多次合并
然而,现有的答案并没有真正解决当您想要恢复的所有内容都来自一系列拉取请求时会发生什么的具体问题,这些请求都是合并。将-m选项与git revert一起使用对于一次合并是很好的,对吧?所以我认为答案是(从命令行(没有一个好的方法来快速恢复一系列已合并的单个拉取请求并保存历史?如果我错了,请纠正我。如果我必须一次做一个,我还不如使用Github控制台,然后单击每个控制台的revert。
如果你想有一个单一的(稍后的(修订版来恢复所有合并的更改,你可以这样做:
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>
更新:如今,使用git restore
更简单
git checkout <the-branch>
git restore --worktree --staged --source <id-of-revision> -- .
git commit -m "Reverting"
你正在到达与原始配方相同的地方。
步骤1
首先创建一个新的备份分支并将其放在一边。(备份分支(从master或dev创建一个新分支,无论您想在哪里恢复。(工作分支(
git revert commitid1
git revert commitid2
git revert commitid3
。。。。是最好的选择。
不要做git reset --hard commitid
,它会打乱你的索引
还原是安全的选择。
我已经完成了180次恢复提交
步骤2
git log -180 --format=%H --no-merges
使用此命令可以单独打印所有提交id。
它将忽略合并提交id。
commitid1 commitid2 commitid3 .....
它会像那样打印。
将其复制到sublime ctrl+a->ctrl+alt+l添加
git revert --no-commit commitid1
git revert --no-commit commitid2
git revert --no-commit commitid3
全部复制并在命令提示下粘贴。您的所有提交都将被还原。现在执行git提交。
然后做git push。创建要master的合并请求。
Step3
如何验证
创建一个新分支(验证分支(。
你可以通过做来验证它
CCD_ 11。这是您需要恢复到的提交id。
git status
它将为您提供master后面的提交数量。
git push -f
现在,通过在这个分支和您的工作分支之间创建一个pull请求来比较它们。您将不会看到任何更改,这意味着您的工作分支已成功恢复到您要查找的版本。