黒毛和牛モモバラ切り落し100g298円

iPhoneアプリを作ってます。リリースノートとか用ブログです。

間違えてgit submodule addしたモジュールをcommitせずに消す方法

以下のように間違えてsubmodule addしたので元に戻したい場合の対処法です。

$ git submodule add https://github.com/... sub/MODULE


1 .gitmoduleから該当エントリを消す

リポジトリのトップディレクトリに.gitmoduleというファイルがありますので、vi等で開いてサブモジュールに関するエントリを消します。

[submodule "sub/MODULE"]
        path = sub/MODULE
        url = https://github.com/...

モジュールが1つしかない場合は、git rmで.gitmoduleファイル自体を消してください。


2 .git/configから該当エントリを消す

リポジトリのトップディレクトリに.gitというサブディレクトリがあり、.git/configにもサブモジュールに関するエントリがありますので消します。

[submodule "sub/MODULE"]
        url = https://github.com/...


3 git rm --cachedでサブモジュールを消す

キャッシュされたエントリ情報を消すためgit rm --cachedします。

$ git rm --cached sub/MODULE


4 .git/modulesディレクトリ以下にあるサブモジュールディレクトリを消す

.git/modules以下にサブモジュールに関するデータを保存しているディレクトリ(今回の例ですと.git/modules/sub/MODULE)がありますので消します。

$ rm -rf .git/modules/sub/MODULE

もしくは、sub/以下にMODULEしか存在しなければsubディレクトリ自体を消しても問題ないです。

$ rm -rf .git/modules/sub

※この手順を抜かすと、同じモジュールを再度git submoduleした場合にモジュールのリポジトリがcloneされません。他のサイトの説明では書い場合がほとんどだったのですが、git commitしても消える訳ではないみたいですので必要だと思います。


5 git commit

コミットして終わりです。