1. ホーム
  2. git

[解決済み] Git Submodule のポインタを、そのリポジトリに保存されているコミットに戻すには?

2022-05-14 09:43:36

質問

私のメイン git リポジトリに git サブモジュールがあります。私が理解しているように、メイン リポジトリは、サブモジュールの特定のコミットを指す SHA 値を (どこかに...) 保存し、それが "linked to" されます。

私は自分のサブモジュールに入り、次のように入力しました。 git checkout some_other_branch . どのコミットから来たのか全くわかりません。

メインレポとサブモジュールが再び同期するように、そのポインタを元に戻したいと思います。

私の最初の (おそらく素朴な) 直感は、次のように言いました。 git reset --hard - という、他のすべてのものに対して機能するように思えるものでした。驚いたことに、それはこのシナリオでは機能しませんでした。

というわけで、私は以下のように入力することができることを理解しました。 git diff と入力し、サブモジュールのポインタが持っていた SHA ID を記録し、その後サブモジュールに移動して git checkout [SHA ID] ... でも、きっともっと簡単な方法があるはずでしょう?

私はまだgitサブモジュールについて学んでいるので、私が知らない概念のための言葉があれば、遠慮なく私の用語を修正してください。

どのように解決するのですか?

サブモジュールを更新して、親リポジトリが信じるものと同期させたいと思います。 これが update コマンドの目的です。

サブモジュールの man ページから。

登録されているサブモジュールを更新する、つまり見つからないサブモジュールをクローンして
登録されているサブモジュールを更新します。
レポジトリのインデックスに指定されたコミットをチェックアウトします。これにより、以下の場合を除き、サブモジュールのHEADは切り離されます。
--rebaseかmergeが指定されているか、submodule.$name.updateのキーが
がrebaseまたはmergeに設定されていない限り、サブモジュールのHEADを切り離します。

これを実行すれば、すべてがうまくいくはずです。

git submodule update --init

を追加することができます。 --recursive フラグを追加して、すべてのサブモジュールを再帰的に検索することもできます。