如何解决从`git stash pop`中的子模块的git合并冲突

15

我有一个带有子模块的git代码库。我需要弹出之前存储的更改,但这会导致子模块引用上的合并冲突。

我想保留我的stash中的更改,除了子模块。对于大多数代码文件,我可以通过编辑冲突的文件来解决冲突,但这似乎不适用于子模块。

如何解决合并冲突并仍然从stash中提取我的更改?

$ git stash pop
warning: Failed to merge submodule some-submodule (commits don't follow merge-base)
Auto-merging some-code
Auto-merging some-submodule
CONFLICT (submodule): Merge conflict in some-submodule

$ git status
# On branch some-branch
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   some-code
#
# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   both modified:      some-submodule
2个回答

21
作为git status命令所说:git reset HEAD some-submodule
顺便提一下,在您确认您的树和索引正确后,您可能需要执行git stash drop。通常git stash pop会这样做,但是当存在冲突时并不会执行。

2
啊,我曾尝试过git reset HEAD some-submodule/,但没有成功( shell 的自动补全会为目录添加一个斜杆)。我不得不去掉这个斜杠。 - Mashmagar
我正在进行一次变基操作,遇到了这个问题。在变基冲突期间,我执行了git reset HEAD some-submodule并将其添加到更改中,然后继续进行变基操作,没有出现任何问题。谢谢。 - j2emanue

0

我一开始在寻找更简洁的解决方案,但最终发现编辑存储区更为简单。具体情况可能因人而异。

git stash show -v > foo
$EDITOR foo
       (remove the fluff you don't want)
git apply < foo

在我的情况下,只需删除“子项目提交”和相关的差异行即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接