未分類

gitでaddやcommitしたディレクトリを後から.gitignoreする方法

githubに公開してはいけないディレクトリを誤って公開してしまった。

そこで対象ディレクトリを.gitignoreに追加したが、すでにadd,commit,pushをしてしまっているため、Gitの追跡対象に含まれてしまっている。

そのため、以下コマンドでディレクトリをバージョン管理対象から外す。

git rm –cached -r dist

git add –all

git commit -m “remove dist”

git push origin master

–cachedオプションを使うことで、作業ツリーにディレクトリを残したまま、バージョン管理から外すことができる。

これで最新のコミットにはdistディレクトリは含まれていない。

ただし、すでにpushを行っているため、過去のコミット履歴をチェックすれば、distディレクトリの中身を盗み見れてしまう。

よって、コミットの履歴も削除する必要がある。

手順は以下の通り。

  1. git reset–soft 対象コミット でコミットを削除する
  2. git push -f ブランチ名で強制的に上書きする

まずは、distフォルダをpushしたコミットIDを見つけて、その直前のコミットまで歴史を巻き戻す。

ここで、–softをつけることで、作業ツリーとインデックスは今のままで、コミットだけをやり直すことができる。

今回はdistフォルダをバージョン管理から外したいだけで、他のフォルダ等が過去の状態に巻き戻ってしまってはいけないので、–softを使う。

 

ここで、git logにより、指定したコミットまで歴史が巻き戻っているか確認しておく。

また、作業ツリーが過去に戻っていないことも確認。

 

ここから、git addgit commitを実行して変更を追加するのだが、git pushでは、ローカルのコミットを削除したことによってリモートのコミットが進んだ状態になるのでpushしてもエラーが発生する。

ローカルの方のコミット履歴を優先させたいので、-fオプションを使用して強制的にリモートリポジトリを上書きする。ここで、ローカルリポジトリのコミット履歴を確認しておく。

上のように、distフォルダをコミットする前の状態ではコミットID:f10a…である。

そして、それ以降のコミットはリセットされて消えており、最新のコミット9c72…がf10aの次にきている。

 

 

参考

https://pikawaka.com/word/gitignore

https://www-creators.com/archives/1662#_gitignore

https://qiita.com/anqooqie/items/110957797b3d5280c44f

https://pikawaka.com/word/gitignore