[英]git merge reverted but the changes needed
我有一个功能分支,我们称之为 A,还有一条主线,我们称之为 B,我们在那里交付。 问题如下:
知道如何在分支 B 中查看分支 A 吗? 备注:自从启动此功能分支 A 以来,主线没有变化,所以我需要的是分支 B 中的 A。提前感谢任何解决方案。
git fetch <remote> <remoteBranch>:<localBranch>
会这样做吗?
git fetch origin A:B
git push origin B
让我们从想象你的情况开始:
branch B
o---o---o---------------M---W
\ /
o---o---o---o
branch A
我假设你已经推送了合并提交M
和它的反向W
,所以你不能再重写分支B
的历史。
如果要在还原第一个合并后将分支A
的更改引入B
,则必须通过还原提交W
来还原还原:
git switch B
git revert W
但是,您说过您不想立即创建提交,而是希望在分支A
中所做的更改在您位于B
时位于工作目录中。 您可以使用git-revert
的--no-commit
选项来做到这一点:
git switch B
git revert --no-commit W
这会将分支A
中的更改带回您的工作目录。
如果你有兴趣首先了解为什么会出现这种情况,我认为Linus 自己的解释最好:
恢复常规提交只是有效地撤消了该提交所做的事情,而且相当简单。 但是还原合并提交也会撤消提交更改的数据,但它对合并对历史的影响绝对没有任何作用。
所以合并仍然存在,它仍然会被视为将两个分支连接在一起,未来的合并会将合并视为最后一个共享状态 - 恢复引入的合并的恢复根本不会影响它。
因此,“还原”会撤消数据更改,但在它不会撤消提交对存储库历史记录的影响的意义上,它并不是“撤消”。
因此,如果您将“还原”视为“撤消”,那么您将永远错过还原的这一部分。 是的,它会撤消数据,但不会,它不会撤消历史记录。
你可以通过重写它的历史来欺骗 git 认为合并的分支没有被合并
git checkout $( git-merge-base feature-branch upstream-branch-before-the-merge )
git cherry-pick HEAD..feature-branch # assuming it is a straight line
# now you have a history just like the original branch but, to git, this is not merged
# let's set the pointer over here
git branch -f feature-branch
如果你尝试合并新分支,git 应该没问题。
但是我不想逐个文件调查内容中可能有错误的地方,我只想删除 B 中的状态并在 B 中获取 A 的状态。我该怎么做?
保持历史记录不变,您可以在当前 B 上恢复 A 内容
cd /path/to/repo
git switch B
git restore -s A -SW -- .
git commit -m "override B with A content"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.