【问题标题】:How to revert multiple pull request merges all at once and preserve history如何一次恢复多个拉取请求合并并保留历史记录
【发布时间】:2020-07-01 02:46:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: git github merge pull-request revert


    【解决方案1】:

    步骤1

    首先创建一个新的备份分支并将其放在一边。 (备份分支) 从 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 commit。

    然后执行 git push。 向 master 创建一个合并请求。

    第三步

    如何验证?

    创建一个新分支(验证分支)。

    你可以通过做一个验证它

    git reset -hard commitidX。这是您需要恢复的提交 ID。

    git status它会给你master后面的提交次数。

    git push -f

    现在通过在它们之间创建拉取请求来将此分支与您的工作分支进行比较。您将看到没有任何变化意味着您的工作分支已成功恢复到您正在寻找的版本。

    【讨论】:

      【解决方案2】:

      如果您希望有一个(以后的)修订版,您可以从所有这些合并中恢复更改,您可以这样做:

      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 用于 ,然后在上面的最后一行之后我做了一个 git checkout -b feature/new-master 然后我可以将它推送到远程并为其创建一个拉取请求。这就是我想要的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 2017-06-28
      • 2014-12-17
      • 1970-01-01
      相关资源
      最近更新 更多