我有一个功能分支,我们称之为 A,还有一个主线,我们称之为 B,我们在其中交付。问题如下:
知道如何在分支 B 中查看分支 A 吗?备注:自从启动此功能分支 A 以来,主线没有发生任何变化,所以我需要的是分支 B 中的 A。感谢您提前提供任何解决方案。
git fetch <remote> <remoteBranch>:<localBranch>
会这样做吗?
git fetch origin A:B
git push origin B
解决方案: 请参阅 VonC 的答案以及我关于索引的问题。感谢大家的回复。
cd /path/to/repo
git switch B
git restore -s A -SW -- .
git commit -m "override B with A content"
但是我不想逐个调查文件中可能存在错误的内容,我只想删除 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"
如果在恢复后,
分支获得了新的更改,并且您在新提交中不需要它们(在这个B
中),您应该将B硬重置到您恢复A的位置,然后然后应用命令。git commit -m "override B with A content"
让我们首先想象一下您的情况:
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
中所做的更改位于工作目录中。您可以使用
--no-commit
的 git-revert
选项来做到这一点:
git switch B
git revert --no-commit W
这会将分支 A
的更改带回到您的工作目录中。如果您有兴趣了解为什么会出现这种情况,我认为
Linus 本人 解释得最好:
恢复常规提交只是有效地撤消该提交所做的事情,而且相当简单。但是恢复合并提交也会撤消提交更改的data,但它对合并所产生的history的影响绝对没有任何作用。
因此合并仍然存在,并且仍然会被视为将两个分支连接在一起,并且未来的合并会将合并视为最后的共享状态 - 并且恢复引入的合并的恢复根本不会影响这一点。因此,“恢复”会撤消数据更改,但它
不是“撤消”,因为它不会撤消提交对存储库历史记录的影响。
因此,如果您将“恢复”视为“撤消”,那么您将永远错过这部分恢复。是的,它会撤消数据,但不会,它不会撤消历史记录。
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
如果你尝试合并 new 分支,git 应该没问题。