【问题标题】:Moving merged commits back to old branch, reverting master and keeping changes将合并的提交移回旧分支,恢复 master 并保留更改
【发布时间】:2015-04-22 19:26:13
【问题描述】:

我将一些提交合并到 master,但现在我需要在新分支上进行这些更改,并且 master 恢复到合并前的状态。

这是提交历史现在的样子:

这就是我想要的样子:

【问题讨论】:

    标签: git merge branch


    【解决方案1】:

    我没有看到差异,但相信我理解问题所在,这是我以前做过的事情。

    1) 创建新分支:假设master是当前分支,创建一个新分支

    c:\git\project> git branch my_new_branch
    

    2) 重置主分支。让我们假设您需要退出的最后 4 次提交。

    c:\git\project> git reset --hard HEAD~4

    3) 在新分支上工作

    c:\git\project> git checkout my_new_branch

    --hard 会导致索引在您要保留的第一次提交时重置,并且所有修改都将丢失。

    一些注意事项: - 如果您已经将主更改推送到遥控器,这不会影响遥控器。至少在我的站点上,我无法推送重置,您必须与遥控器的所有者(或 git 管理员)一起做类似的事情。 - --hard 还应该清理未跟踪的文件,至少我阅读的文档是这样说的,但我不相信它总是会发生。

    【讨论】:

    • 这是第一步。基本上,最终结果是 master 包含了我想要恢复到的提交之前的所有提交(上图中的3c22fc0,最早的合并),new_branch 包含之后的所有提交。在验证分支包含我想要的内容后,我只需将 new_branch 重命名为 master ,反之亦然,更改 .git/config 文件以反映新的远程分支名称,然后强制 push 两个分支.
    【解决方案2】:

    如果您在合并后没有提交,您可以简单地将 master 重置为合并前的提交并继续处理前一个分支(假设它只是合并而没有删除)。

    如果您在合并后有提交,则必须创建一个分支,然后再恢复合并。

    【讨论】:

      猜你喜欢
      • 2015-01-03
      • 1970-01-01
      • 2013-09-21
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 2022-08-18
      相关资源
      最近更新 更多