MrT*_*Tux 15 git git-submodules
我有两个分支A和B.两者都包含一个子模块(在文件夹中sub),但是在不同的提交中(不会从一个快进到另一个).
A B
| /
BASE
Run Code Online (Sandbox Code Playgroud)
我已经检查过A,但子模块尚未初始化.现在我合并B,我在子模块上发生冲突.
$ git status
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: sub
Run Code Online (Sandbox Code Playgroud)
发布git checkout --ours sub什么都不做(如果子模块初始化它有效,也git checkout-index -f --stage=2 -- sub不起作用).git add sub导致错误error: pathspec 'sub' did not match any file(s) known to git..
$ git diff sub
diff --cc sub
index 533da4e,ab2af77..0000000
--- a/sub
+++ b/sub
@@@ -1,1 -1,1 +1,1 @@@
- Subproject commit 533da4ea00703f4ad6d5518e1ce81d20261c40c0
-Subproject commit ab2af775ec467ebb328a7374653f247920f258f3
++Subproject commit 0000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
git submodule init -- sub什么也没做.也git submodule update --init --force -- sub行不通:Skipping unmerged submodule sub.
那么,我该如何解决这个子模块冲突(在没有中止合并并在初始化子模块后重试)?
use*_*445 21
什么使你的情况有点烦人是git不会让你初始化一个未合并的子模块,所以只是将子模块设置为子模块然后运行所需的状态的普通建议git add将不起作用.您可以做的是直接更新索引,而无需通过工作树.
更新索引的一种方法是使用git reset.如果您知道子模块处于所需状态的提交,则可以使用该提交.例如,以下任何一个可能是您想要的:
git reset master -- sub
git reset master@{upstream} -- sub
git reset HEAD -- sub
git reset MERGE_HEAD -- sub
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用plumbing命令直接更新索引git update-index.要做到这一点,你需要知道gitlink类型的对象(即父存储库中指向子模块的目录条目)是0160000.没有办法从第一原则中找出它,但是你可以从中找出它git ls-files -s或以下参考(请参阅4位对象类型下的"1110(gitlink)"):https://github.com/gitster/git/blob/master/Documentation/technical/index-format.txt
要使用该方法,请找出要将子模块设置为的哈希,然后运行,例如:
git update-index --cacheinfo 0160000,533da4ea00703f4ad6d5518e1ce81d20261c40c0,sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9957 次 |
| 最近记录: |