#はじめに
GitHubにpushしてはいけないファイルをコミットしてしまっていた場合に、その履歴をまとめて修正したい場合、どうすればいいかを学んだ。
途中でエラーがでたところもあったので、その解決方法も書く。
#手順
##安全に行う為、ブランチを切る
git checkout -b delete-check
##そのブランチ上で、試す
今回は例として.envファイルを削除する。
git filter-branch --tree-filter 'rm -f .env' HEAD
filter-branch --tree-filter
で各コミットに対し、その後に続く、rm -f .env' HEAD
のコマンドを実行する。
WARNING: git-filter-branch has a glut of gotchas generating mangled history
rewrites. Hit Ctrl-C before proceeding to abort, then use an
alternative filtering tool such as 'git filter-repo'
(https://github.com/newren/git-filter-repo/) instead. See the
filter-branch manual page for more details; to squelch this warning,
set FILTER_BRANCH_SQUELCH_WARNING=1.
Proceeding with filter-branch...
Rewrite 7575dc6065c2dbbeef43df034dbe859f5a078 (1/6) (0 secoRewrite 98d96539c8c44062b280efc10e588a99b41b (2/6) (0 secoRewrite 25c2d7bc0e4d3fe23553c7b7607306c300c2dc (3/6) (0 secoRewrite d47862db7be1ab51df7b5e09f351abbf7b (4/6) (0 secoRewrite 2d0e1d8d96a19d35bc3a4453bc653c0cdc3ec5 (5/6) (0 secoRewrite 3fee6b5c30b9ddf9432de818cc5d9d20b13e0 (6/6) (0 seconds passed, remaining 0 predicted)
Ref 'refs/heads/delete-check' was rewritten
こういった出力になり、上書きされていることがわかる。
##masterブランチで実行する。
安全のために切ったdelete-check上で実行できることがわかったので、次にmasterブランチ上で同じコマンドを実行する。
git filter-branch --tree-filter 'rm -f .env' HEAD
すると、
Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f
というエラーになり、
前のバックアップがあるから、上書きしたいんやったら -f つけて
と言われたので、
git filter-branch -f --tree-filter 'rm -f .env' HEAD
-f
をつけて実行すると成功。
###GitHubにプッシュ
git push -f origin master
これでローカル、リモートどちらも上書きされる。
##終わりに。
最後まで読んで頂きありがとうございます
転職の為、未経験の状態からReact,Railsを学習しております。継続して投稿していく中で、その為のインプットも必然的に増え、成長に繋がるかと考えています。
投稿の内容に間違っているところや、付け加えるべきところが多々あるかと思いますので、ご指摘頂けると幸いです。この記事を読んで下さりありがとうございました。