サブモジュールがあるgitの状態に「新しいコミット」が表示されます。

サブモジュールがあるgitの状態に「新しいコミット」が表示されます。

サブモジュールを含むプロジェクトがあり、サブモジュールを変更してからその変更をコミットすると、メインプロジェクトはそのサブモジュールに「新しいコミット」と表示されます。

しかし、「git pull」を実行し、ローカルプロジェクトを更新してドラッグしている間にサブモジュールのコミットが変更されると、「git status」にも「新しいコミット」が表示されます。

「新しいコミット」が「ローカルの変更をコミットする必要がある」ことを意味するのか、それとも「更新する必要がある新しい参照で更新しました」を意味するのか混乱しています。

「新しいコミット」は、完全に反対する2つの事実を伝えることができるようです。

プッシュする必要がある変更があるのか​​、更新する必要がある新しい参照があるのか​​、最上位レベルで知ることができるより良い方法はありますか?

ベストアンサー1

私の考えであなたが見るのはこれです:

$ git status
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:   sub (new commits)

no changes added to commit (use "git add" and/or "git commit -a")

これを理解するには、プロジェクトにサブモジュールを配置すると、gitはそのサブモジュールが複製された場所を追跡するだけでなく、そのサブモジュールの最新(または選択された)コミットID(HEADなど)も追跡することに注意してください。チェックアウト時に特定のバージョンのサブモジュールをインポートするようにします。それ以外の場合は、以前のバージョンのコードを確認するときに互換性のないバージョンのサブモジュールをインポートできます。

Gitは、サブモジュールのHEADコミットIDが変更され、その変更を親プロジェクトにコミットできることを伝えます。すると、git diff変更されたコミットIDが表示されます(もちろんIDは異なります)。

$ git diff
diff --git a/sub b/sub
index d67371f..07bc855 160000
--- a/sub
+++ b/sub
@@ -1 +1 @@
-Subproject commit d67371f7485a97dd4d00802619f93a0cb4d2df16
+Subproject commit 07bc855dd4d958783a686241b911aead1d73ca3c

それは問題ではありませんなぜサブモジュールチェックアウトのHEADコミットIDが変更されました。git pull親プロジェクトに関する限り、サブモジュールの新しいバージョンをインポートする(サブモジュールディレクトリなど)、またはサブモジュールディレクトリからローカルにコミットすることは同じことを行います。サブモジュールHEADコミットIDを変更するための新しいマルチコミット。

おすすめ記事