GIT:如何在恢复合并后从分支中提取更改

Posted

技术标签:

【中文标题】GIT:如何在恢复合并后从分支中提取更改【英文标题】:GIT: How to pull changes from branch after a reverted merge 【发布时间】:2015-11-15 07:35:20 【问题描述】:

我希望标题不是很混乱。

历史(也就是我做错了什么):

假设有两个分支,master 和 feature。 Feature 是一个分支,我在其中保留了一个较长的特性项目,并且不时在该分支上使用 git pull origin master 来保持对主代码更改的更新。

我不小心将功能合并并推送到 master 中。

它还远远没有准备好,所以我试图恢复它。我试过以下:http://sethrobertson.github.io/GitFixUm/fixup.html#pushed_new_merge 但我想我做错了。我用了: git 还原 然后提交还原并推送它。问题似乎已解决 - 不再在 master 上的功能发生变化。

现在的问题是,当我尝试在功能分支上使用 git pull origin master 时,它会不断删除我的文件并恢复所有更改,因为它正在与 revert-commit 合并。主人的负责人已经过去了,我需要从较新的提交中提取更改以继续功能分支。

我用谷歌搜索了这个主题,最有希望的答案是: https://metlos.wordpress.com/2012/01/13/git-merging-after-a-revert/ 但这里的合并不是我想要的(功能要掌握,我需要主人来做特色)。

我正在考虑创建 master 的克隆分支,然后应用该分支上链接中的指令,以便获得所需的结果,但我担心这是一个临时解决方案,我需要随时申请来自主人。

我尽量不让这个故事变得混乱,如果有什么不明白的地方我会澄清。

【问题讨论】:

【参考方案1】:

如果您还没有将 master 分支推送到团队/公共存储库,并且您在 pull on master 后没有提交,您可以这样做

git reset --hard **the-commit-before-pulling-feature-branch**

master 分支上。这将有效地从历史中消除错误并提供干净的历史。

否则,(即,如果您已经将 master 推送到 repo 或在 master 上进行了更多提交),您可以这样做

git revert **the-revert-commit**

feature 分支上拉出 master 后,有效地还原了 revert 提交。

【讨论】:

我已经推送了它并且已经进行了新的提交。您的解决方案就像一个魅力,起初我得到一个“无法恢复”的错误,但它只是一个需要手动合并的文件。非常非常感谢。 如何在将主分支拉到我的功能分支时恢复“合并提交的恢复”?它需要一些父节点/分支。您能否在答案中也添加这部分?

以上是关于GIT:如何在恢复合并后从分支中提取更改的主要内容,如果未能解决你的问题,请参考以下文章

如何将本地未提交的更改合并到另一个 Git 分支?

如何在 Git 的另一个分支中选择性地合并或选择更改?

恢复错误合并后恢复丢失的更改

在 git 中如何将 Feature 分支合并到 Main 分支然后重新同步

如何在git中将大型合并请求拆分为多个部分

在 git 中切换分支时,如何让 Emacs 恢复所有未更改的缓冲区?