close

git rm -r –cached で全ファイルをrmしてしまった話【備忘録】

公開日:

.gitignore_globalを新規作成した後Gitを触っていて気づいた備忘録です。

経緯

Macを利用していると自動作成される.DS_Storeさん。いつも邪魔な彼を一括でGit管理から無視しようと思ったわけです。

~/.gitignore_globalに.DS_Storeを記載して~/.gitconfigにも設定を加えたが、ステージングする際に反映されず。

そうだ、キャッシュを削除すればいいのか。と考えたんですね。

ターミナルで実行

 $ git rm -r --cached .
 error: the following file has staged content different from both the
 file and the HEAD:
     app/.DS_Store
 (use -f to force removal) 

ステージングが邪魔してますね。
よし、GUI Git管理ツールを一旦落として、再実行してみよう。

-r再帰的実行
 
 $ git rm -r --cached .
 rm 'app/.DS_Store'
 rm 'app/Console/Kernel.php'
 rm 'app/Exceptions/Handler.php'
 rm 'app/Http/Controllers/Auth/ConfirmPasswordController.php'
 rm 'app/Http/Controllers/Auth/ForgotPasswordController.php'
 rm 'app/Http/Controllers/Auth/LoginController.php'
 rm 'app/Http/Controllers/Auth/RegisterController.php'
 rm 'app/Http/Controllers/Auth/ResetPasswordController.php'
 rm 'app/Http/Controllers/Auth/VerificationController.php'
 rm 'app/Http/Controllers/Controller.php'
 rm 'app/Http/Kernel.php'
 rm 'app/Http/Middleware/Authenticate.php'
 rm 'app/Http/Middleware/CheckForMaintenanceMode.php'
 rm 'app/Http/Middleware/EncryptCookies.php'
 rm 'app/Http/Middleware/RedirectIfAuthenticated.php'
 rm 'app/Http/Middleware/TrimStrings.php'
 rm 'app/Http/Middleware/TrustProxies.php'
 rm 'app/Http/Middleware/VerifyCsrfToken.php'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~省略

フレームワークをGit管理していたので8000以上の全ファイルがインデックスからrmされました。

キャッシュ削除。こういうことだったんですね。

どうすれば良かったか

$ git rm --cached -r .DS_Store

-rオプションで下層にある同ファイルにも適用される(再起的オプション)

差分インデックス復活

数ファイル編集していたため、直前のコミットに戻り、もう一度同じファイルを編集しようとしました。

変更ファイルのインデックスがStashになった時に、差分ファイルのインデックスが再生成されました。(?)

git stash applyして解決です。

まとめ

.DS_StoreフォルダをすでにGitで追跡中の場合、追跡解除及び無視するためには

 git rm --cached .DS_Store -r 

を実行した後、.gitignoreファイルに .DS_Store を追記

参考にしたQiita記事

git の監視から逃れる方法https://qiita.com/sqrtxx/items/38a506e59df67cd5d3a1

Comment

メールアドレスが公開されることはありません。