投稿数 585
公開から 2940

gitで特定のファイルに関するコミットを履歴からもすべて削除する


Categories: git

いきさつ

publicなgithubリポジトリににセキュリティに関するとんでもないファイルをコミットしてしまった!! 上司はカンカンで!! 僕をガンガンぶん殴る!! 「コミットを消すまで僕は・・・殴るのを・・・やめない・・・!!」

これで・・・

// ファイルの場合
git filter-branch --tree-filter "rm -f [ファイルパス]" HEAD
// ディレクトリごとな場合
git filter-branch --tree-filter "rm -f -r [ディレクトリパス] " HEAD

エラー発生

エラーはトモダチ・・・

Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f

フォースをつけます。

git filter-branch -f --tree-filter "rm -f やばいふぁいる.php" HEAD

いけました!!!

git gc

git gcとは?

ガベージコレクション。 参照してないgitデータを削除できます。

あれ?リモート(github)のcommit履歴、ハッシュ直接入力したら表示されるんだが?

焦りました!! 確かにページ遷移では見られない様になりましたが、 直接以下みたいなハッシュリンク叩いたら表示されちゃう!! だめじゃん!!

https://github.com/example/example_repo/commit/hashhashhashaaaaaa

自力ではどうにも・・・

git push -f 系とかでどうにかなるちゃうん? とおもったがだめみたい・・・

ただし、こうしたコミットも、リポジトリのクローンやフォークからは、GitHub でキャッシュされているビューの SHA-1 ハッシュによって直接、また参照元のプルリクエストによって、到達できる可能性があることに注意することが重要です。 GitHub では、リポジトリに既存のクローンやフォークについては何もできませんが、キャッシュされているビューや、プルリクエストでの機密データへの参照は、GitHub Supportまたは GitHub Premium Support へ連絡することにより恒久的に削除することができます。

githubのお世話になるしかないのか・・・ なんでやねん・・・

しゃーない。

リポジトリ作り直すか。。? githubから削除->新規作成 もちろんPRとかは全部処理しないといけません。。。 issueも消える・・・ 現実的じゃないね・・・

参考

https://help.github.com/ja/github/authenticating-to-github/removing-sensitive-data-from-a-repository