繁体   English   中英

git undo merge 到 master,但在本地保留更改

[英]git undo merge to master, but keep the changes locally

我有一个功能分支和一个主分支。 我对该功能做了一些工作,合并到 master 中,推送更改,然后远程和本地删除功能分支。 到现在为止还挺好。

合并后,我意识到我的功能更改存在问题。 我想撤消对 master 的合并,但仍保留功能更改,以便我可以再次处理它们。 我怎样才能做到这一点?

我原来的:

A---B---C---D   [master]
     \      
      E----F    [feature]

我现在所拥有的:

A---B---C---D---EF (squashed) [master]

我想要的是:

A---B---C---D      [master]
             \
              EF   [feature]

我该如何实现?

有许多命令序列可以做到这一点。 这是一个简短的。

  1. 确保所有内容git status提交( git status ),以便第 3 步不会破坏任何内容。 这始终是一个有用的基本步骤。 :-)
  2. 运行git branch feature
  3. 运行git reset --hard HEAD^git reset --hard HEAD~ (拼写都可以,使用您喜欢输入的任何内容)。

解释:

  • 第 1 步应该是显而易见的。

  • 第 2 步创建新名称feature ,标识与master标识相同的压缩EF提交。 这给你:

     A--B--C--D--EF <-- master (HEAD), feature

    (HEAD)注释显示哪个分支名称是当前分支名称,因此哪个提交也是当前提交(在本例中为EF )。

  • 步骤 3 移动当前分支名称以指向选定的提交。 正如我们在图中看到的,当前分支名称是master 选定的提交是从提交EF返回的第一父级: EF^表示“提交EF第一个父级”,而EF~表示“从EF开始,后退第一个父级”。

    结果是:

     A--B--C--D <-- master (HEAD) \\ EF <-- feature

    这就是你想要的。

请注意, EF~2将从EF开始并倒数两次,到D然后到C ,这样master (仍然是HEAD )将指向提交C而不是提交D --hard to git reset告诉 Git 用所选提交中的内容替换索引内容,并更新您的工作树以匹配。

您需要在合并D之前将 --sort master 分支重置为提交,这将使您掌握D提交,并且EF提交将在您的机器上本地,确保从这里然后强制推送主删除不需要的EF提交然后创建新的feature分支并再次提交本地更改

脚步:

  • git reset --soft YOUR_COMMIT_HASH

  • git status // 确保你的文件没有消失

  • git stash // 让你的脑袋干净

  • git push -f origin master

  • git checkout -b feature

  • git stash pop // 检索已删除的提交更改

参考: https : //git-scm.com/docs/git-reset#Documentation/git-reset.txt---soft

这可以通过 3 个步骤完成:

master分支上:

$ git reset --hard <Hash of D>    # D is now the tip of master branch
$ git switch -c feature   # Creates a new feature branch based on D and move to it

现在在新创建的feature分支上:

$ git cherry-pick <Hash of EF> # Restores the EF commit

这就是所需要的全部内容。

当一个分支被删除时,任何丢失的提交都可以在给定的时间段内(默认为 30 天)在reflog找到,因此可以在那里找到EF提交哈希以防万一:

$ git reflog

注意: git 2.23.0+提供了switch -c命令,其作用与checkout -b相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM