从合并基础到头部逐步重新构建 Git 分支

问题描述 投票:0回答:2

我有一个 Git 存储库,其中有一个主分支 A 和一个旧的维护分支 B:

A0 -> A1 -> A2 -> A3 -> ... -> An (main branch A)
       \
        \-> B1 -> B2 -> B3 -> ... -> Bm (branch B)

主分支与分支 B 有很大分歧,而分支 B 则从 A 中挑选了一些更改,并获得了分支 A 中缺少的功能。

我想变基到分支 A 之上的分支 B,但是 git rebase 只是将提交 B1..m 重新应用到分支 A 的头部,这导致了许多无法解决的冲突。

有没有办法在分支 A 上重新建立分支 B,但逐渐从 A1 提交到 An,并在每一步都解决冲突?这相当于执行:

git checkout B
git rebase A1
git rebase A2
...
git rebase An
git rebase
2个回答
0
投票

是的,您可以通过多种选项来做到这一点。

变基选项

只需使用

git rebase -i A B
变基状态以交互模式启动,您可以更改提交顺序(只需向上或向下移动行)。您还可以将
pick
更改为
edit
,并且您的变基将针对每个
edit
逐步进行。

当发生冲突时,变基将会中断。这个状态调用

interrupted rebase
,你可以通过
git status
来查找哪里有冲突。 尝试解决冲突、保存文件并将更改附加到索引阶段 -
git add <filename>
。 当冲突得到解决时,只需
git rebase --continue
即可在 A 的历史之上继续 B 的变基历史。

择优选择

您可以使用

git cherry-pick [-n] <commit>
执行此操作,以通过变基达到与上面相同的结果。但这很慢,应该手动完成。
-n
选项允许您获取索引阶段的所有更改
git status
,编辑这些更改并继续
git commit + git add


0
投票

我最近需要在主干之上重新调整我的功能分支,这有很大的分歧。由于差异如此之大,一次性重新调整整个分支的基础是不可行的,我不得不拆分工作。

首先,你想要

git log --graph <target-branch>
。具体来说,您只想使用图中最左边的主线提交。
然后使用

*

。可能会增加

git rebase --onto <commit> <target-branch>
    

© www.soinside.com 2019 - 2024. All rights reserved.