【发布时间】:2017-05-20 01:53:11
【问题描述】:
我有一个项目parent 有分支master 和work。 master 分支仅用于从上游存储库中提取更改,并且不时将这些更改合并到 work 分支中。不会对 master 分支进行任何更改。
该项目有一个子模块child。在某些时候,在我将更改从 master 分支合并到 work 分支后,我注意到两个分支上的子模块指针不同。每当我从一个分支切换到另一个分支然后输入git status 时,我都会得到,例如切换回master时:
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: child (new commits)
git diff 的输出类似于:
diff --git a/child b/child
index 02232f9..5902a22 160000
--- a/child
+++ b/child
@@ -1 +1 @@
-Subproject commit abcdefdeadbeef0123456789
+Subproject commit 12381257dea0ffff018dead
通过git submodule update 更新子模块通过使更改消失来“修复”当前的问题,但是每当我切换分支时,我都会再次遇到受污染的索引。我希望分支work 的子模块指针始终指向与我上次将master 合并到work 时分支master 上的提交相同的提交,但是在执行git submodule update 之后,我无法合并master 变成 work,因为 git 认为 work 已经是最新的了。
如何“修复”分支 work 中的子模块指针,并使其指向与分支 master 中的相同提交?
我知道过去曾与分支work 上的子模块发生冲突问题,但我不知道它发生的时间和地点,因此我无法确切说明为什么会发生这种情况。
有没有办法找出parent 的哪个提交更改了子模块指针? 根据this question,这是不可能的?
【问题讨论】:
标签: git git-branch git-merge git-submodules