2017-01-05 8 views
0

私は、masterworkのブランチを持つparentプロジェクトを持っています。 masterブランチは、アップストリームリポジトリから変更をプルするためにのみ使用され、時々これらの変更をworkブランチにマージします。マスターブランチに変更は行われません。Git:2つの親ブランチでサブモジュールのポインタが同じコミットになる方法

プロジェクトにサブモジュールchildがあります。ある時点で、masterブランチの変更をworkブランチにマージした後、私は2つのブランチのサブモジュールポインタが異なることに気付きました。 1つのブランチから別のブランチに切り替えて、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の出力には、の線に沿って何かである:git submodule update「修正」の変化は、離れて行くことによってすぐに問題を介してサブモジュールを更新

diff --git a/child b/child 
index 02232f9..5902a22 160000 
--- a/child 
+++ b/child 
@@ -1 +1 @@ 
-Subproject commit abcdefdeadbeef
+Subproject commit 12381257dea0ffff018dead 

しかし、私が支店を切り替えるたびに、私は汚染されたインデックスを再度持ちます。 Gitはworkがあると思うので、私は、いつも私が最後workmasterを合併しますが、ときgit submodule updateを実行した後、私はworkmasterをマージすることはできませんでしたブランチmasterの一つとして同じコミットを指すように枝workのサブモジュールのポインタをしたいですすでに最新の状態になっています。

ブランチmasterに1が行うようにどのように「修理」ブランチworkにおけるサブモジュールのポインタと、それは同じにポイントしますが、コミットすることができますか?

私は、競合の問題が枝work上のサブモジュールで一度過去にあったことを知っているが、どこでそれが起こったので、私は本当にこのような状況が発生した理由を正確に伝えることができないとき、私はもう知りません。

parentがサブモジュールポインタを変更したことを確認する方法はありますか?this questionによると、それはできませんか?

答えて

1

コードの変更と同じように、更新されたサブモジュールをコミットする必要があります。あなたがそれを望んでいることをコミットするサブモジュールを取得した後、メインプロジェクトのルートからの分岐であなたは(あなたのケースworkに)更新したいながら:

git add . 
git commit -m "Updating Submodule" 

であなたのブランチ「ポイント」を作るということ正しいコミット。

また、あなたは `work`ブランチで行われたときにこれが問題を解決し

git add /path/to/module 
git commit -m "Updating Submodule" 
+0

コミットしたくないその他の変更がある場合は!答えを明確にすることができればうれしいです(ブランチ 'work')。サブモジュールを手作業で特定のコミットに更新し、その変更をインデックスに追加する必要があります。 – moktor

+1

私はいくつかの説明を追加しました。 'git commit'はあなたが現在いるブランチに常に影響を与え、時には別のブランチ上のサブモジュールを更新したいと思うかもしれないので、後世のためにもっと一般的にしました。 – GentlemanMax

関連する問題