Git:如何使子模块指针指向两个父分支上的相同提交
Git: How to make submodule pointer point to identical commit on two parent branches
我有一个项目 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
"fixes" 更新子模块通过使更改消失来解决眼前的问题,但是每当我切换分支时,我都会再次拥有一个受污染的索引。我希望分支 work
的子模块指针始终指向与我上次将 master
合并到 work
时分支 master
上的提交相同的提交,但是在执行 git submodule update
,我无法将 master
合并到 work
,因为 git 认为 work
已经是最新的。
如何 "repair" 分支 work
中的子模块指针并使其指向与分支 master
中的相同的提交?
我知道以前分支 work
上的子模块存在冲突问题,但我不知道它发生的时间和地点,因此我无法确切地说出原因出现了这种情况。
有没有办法找出 parent
的哪个提交更改了子模块指针? 根据 ,这不可能吗?
您必须像提交代码更改一样提交更新的子模块。在将子模块提交到您想要的提交之后,在您要更新的分支中从主项目的根目录开始(在您的情况下 work
):
git add .
git commit -m "Updating Submodule"
这将使您的分支 "point" 处于正确的提交状态。
或者,如果您有其他不想提交的更改
git add /path/to/module
git commit -m "Updating Submodule"
我有一个项目 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
"fixes" 更新子模块通过使更改消失来解决眼前的问题,但是每当我切换分支时,我都会再次拥有一个受污染的索引。我希望分支 work
的子模块指针始终指向与我上次将 master
合并到 work
时分支 master
上的提交相同的提交,但是在执行 git submodule update
,我无法将 master
合并到 work
,因为 git 认为 work
已经是最新的。
如何 "repair" 分支 work
中的子模块指针并使其指向与分支 master
中的相同的提交?
我知道以前分支 work
上的子模块存在冲突问题,但我不知道它发生的时间和地点,因此我无法确切地说出原因出现了这种情况。
有没有办法找出 parent
的哪个提交更改了子模块指针? 根据
您必须像提交代码更改一样提交更新的子模块。在将子模块提交到您想要的提交之后,在您要更新的分支中从主项目的根目录开始(在您的情况下 work
):
git add .
git commit -m "Updating Submodule"
这将使您的分支 "point" 处于正确的提交状态。
或者,如果您有其他不想提交的更改
git add /path/to/module
git commit -m "Updating Submodule"