如何对包含合并提交*和*对应的前一个分支点的 git 分支进行变基

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

我正在尝试以交互方式将分支

tmp/20241220-rebase-source
的提交重新设置为
tmp/20241220-rebase-target
。 对 rebase 的提交包括分支点和相应的合并提交 (ba87116b)。这就是
tmp/20241220-rebase-source
的样子:

* 1df0fff2
* f2659d53
*   ba87116b  <-- I believe this commit contained merge conflicts, which were fixed manually; but I want to rebase the commit as is
|\  
| * decacca4
* | 22820e76
|/  
* 212d1db1
* 304733f0
* e7d2ed57
* 78fd41bf
* 15251fab
* 6854d87c
* 53d2b1c8
* fbf44673
* 911afc16
* bb56930f
* 75d7085d
* 23674b1a <- commit is already cherry-picked into `tmp/20241220-rebase-target`, to fix a merge conflict (the following commits do to touch this file and thus there cannot be a merge conflict) 
| <- other commits to ignore from rebase, below 
|

我精心挑选了第一个提交(23674b1a),因为它导致了单个文件中的合并冲突,我手动修复了该冲突。 所有其他提交/添加/新文件,因此不应产生合并冲突。

git checkout tmp/20241220-rebase-source
git rebase --rebase-merges --onto tmp/20241220-rebase-target --interactive 23674b1a

运行变基脚本会导致合并提交发生合并冲突

ba87116b
:

(tmp/20241220-rebase-source)> git rebase --rebase-merges --onto tmp/20241220-rebase-target --interactive 23674b1af2c7d4451ba5a5b788e91fcaf9d3e90d

Auto-merging example_form_xml/form1/file1.xml
CONFLICT (content): Merge conflict in example_form_xml/form1/file1.xml
Auto-merging example_form_xml/form1/file2.xml
CONFLICT (add/add): Merge conflict in example_form_xml/form1/file2.xml
Could not apply ba87116b...

我相信这个问题是造成的,因为原始合并提交

ba87116b
包含冲突,这些冲突已手动解决,并且我已在变基中再次解决了它们。但这不是我想要的行为,因为我只想按原样重新调整提交的基础。

这可能吗?如果可以,我该如何实现这一目标?

git rebase git-rebase
1个回答
0
投票

不是解决这个问题的最优雅的方法但是它将让你继续前进。如果您仔细想想,如果您在

ba87116b
之上开发了
decacca4
(反之亦然)而不是
22820e76
,则
212d1db1
就是代码的样子。既然如此,我会在尝试变基之前拉直该分支:

git rebase -i 212d1db1 1df0fff2

使用正确的分支名称作为那里的第二个提交 ID。您应该看到一个包含

ba87116b
的提交列表。无需害怕...继续阅读。

当您运行此变基时应该发生的事情是,在应用

22820e76
decacca4, whichever what applied second. When that happens, just take advantage of the tree in 
ba87116b` 时,它应该停止冲突,因为这是应该存在的结果代码:

git restore --source=ba87116b --work-tree --cache -- .
git rebase --continue

这应该允许变基完成......现在你可以变基分支,因为它是一条直线并且你已经将之前的冲突解决方案合并到你的狭窄分支中。

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