至少 Git 2.38(2022 年第三季度)在合并子模块时提供了更详细的帮助信息,特别是在合并冲突的情况下。
查看提交 565577e, 提交 34ce504, 提交 a5834b7 (2022年8月18日) 由Elijah Newren (newren
)提交。
查看提交 4057523 (2022年8月4日) 由Calvin Wan (CalvinWan0101
)提交。
(由Junio C Hamano -- gitster
--合并于提交 df3c129, 2022年8月25日)
签名作者:Calvin Wan
当尝试合并具有冲突子模块指针的超级项目时,如果无法快进或轻松解决,则合并失败,Git会打印一个准确描述失败的错误消息,但不提供用户解决错误的步骤。Git处于冲突状态,需要用户执行以下操作:
1. 合并子模块或将子模块更新到反映合并的现有提交
2. 将子模块更改添加到超级项目中
3. 完成合并超级项目
对于新的子模块用户来说,这些步骤并不明显,他们很难根据错误消息找出解决方法,
git submodule status
(man)和
git status
(man)也没有提供任何有用的指针。
更新错误消息以提供解决子模块合并冲突的步骤。虽然消息很长,但它还具有需要合并的子模块提交的ID,这对用户可能是有用的信息。
此外,已更新了5个导致早期返回的合并失败,以反映合并的状态。
1. 空合并基础(null o):添加了
CONFLICT_SUBMODULE_NULL_MERGE_BASE
作为新的冲突类型,并将打印更新的错误消息。
2. 空合并侧a(null a):BUG()。请参见
discussion
3. 空合并侧b(null b):BUG()。请参见
for discussion
4. 子模块未签出:添加了NEEDSWORK位
5. 子模块提交不存在:添加了NEEDSWORK位。带有NEEDSWORK位的错误需要更详细地解释如何解决。请参见
here for more context。
现在您已经掌握了解决子模块合并冲突的建议。
第一个参数是子模块名称,第二个参数是需要合并的缩写ID。
例如:
go to submodule (mysubmodule), and either merge commit abc1234
or update to an existing commit which has merged those changes
另外,新消息:
Recursive merging with submodules currently only supports trivial cases.
Please manually handle the merging of each conflicted submodule.
This can be accomplished with the following steps:
sub1:
- come back to superproject and run:"
git add sub1
to record the above merge or update"
- resolve any other conflicts in the superproject
- commit the resulting index in the superproject