Github で間違って push してしまった

基本はここに書いてある。

https://help.github.com/articles/remove-sensitive-data

何が困るのか?

  1. 公開すべきでないファイルを push してしまった
  2. コミットメッセージに公開すべきでない情報を載せてしまった
  3. 公開すべきでないアカウントで commit して push してしまった

大前提

  • 完璧に消すには一度レポジトリを削除する必要がある
  • 公式にも書いてあるが、ローカルの git のレポジトリデータとしては整理ができたとしても、git push した先の Github のシステムとしては綺麗に消せたかどうかは判断しようがない。実際、見かけ上は消えていたとしても、sha1 を直接指定すれば閲覧できる。(sha1 を覚えているようなことは稀かと思うが)
  • 以下は、あくまでレポジトリ削除後に、再アップロードするための整理の方法

Case 1

  • ローカルで履歴を書き換える
    • git commit --amend もしくはブランチを戻して再度 commit など
    • git filter-branch で作業した場合などはバックアップも消す
      • rm -rf .git/refs/original/
  • reflog を消す
    • git reflog expire --expire=now --all
  • ブランチから管理されなくなった不要オブジェクトも消す
    • git gc --aggressive --prune=now
  • クリーンナップされたレポジトリで再度アップロードする
    • Github のレポジトリを一度削除して同じレポジトリ名で作りなおす
      • Public activity などから sha1 をクリックするとまだ見えてしまうため一度削除する必要がある
    • git push -u origin master