100MB超のファイルをコミットしてしまい githubに pushを拒否された時

Git

うっかりgithubに受け付けてもらえないような大きなファイルをリポジトリに追加してしまった時の対策。普通に削除しても消えません。

まっとうなソースコードのリポジトリならそんなことは普通ないはずですが、うっかり100MBを超える大きさのファイルをリポジトリに追加してコミットまでしてしまったとします。

$ git add でかいファイル.tar.gz
$ git commit -m 'でっかいファイル追加したった'
$ git push

remote: error: File でかいファイル.tar.gz is 123.00 MB; this exceeds GitHub's file size limit of 100 MB

githubへ pushしようとした時、ファイルが大きすぎるということで拒否られます。あなたは嫌な予感がしつつも、問題のファイルを普通に git rmで削除して再度 pushを試みます。

$ git rm でかいファイル.tar.gz
$ git commit -m 'でっかいファイル、ダメだったので削除したった'
$ git push

remote: error: File でかいファイル.tar.gz is 123.00 MB; this exceeds GitHub's file size limit of 100 MB

_人人人人人人人_
> デスヨネー <
 ̄Y^Y^Y^Y^Y^Y ̄

リポジトリから普通に削除したところで履歴には全ての情報が残りますので、pushの対象から外れてくれるわけではありません。そういう時は、ちょっと込み入ったコマンドを使ってそのファイルがリポジトリに追加された事実自体を履歴から抹消する必要があります。

$ git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch でかいファイル.tar.gz' \
  --prune-empty --tag-name-filter cat -- --all
$ git commit --amend -CHEAD
$ git push

詳しくはGitHubのヘルプに書いてあります。Working with large files · GitHub Help

同じカテゴリの記事

githubから httpsでcloneしてしまったリポジトリの originを sshに変更する 2013年11月4日
公開してはいけないファイルを誤ってgitに追加してしまった場合 2009年1月1日
Subversion上にあるリポジトリをgithubへ公開する 2008年10月21日

お勧めカテゴリ

英語でアニメ観ようず
なじみ深い日本製アニメの英語版DVDで、字幕と音声から英語を学びましょうという趣旨のシリーズ記事です。
ScalaのようでJavaだけど少しScalaなJSON API
Scalaと Spring Frameworkを使って REST的なJSON APIを実装してみましょう。
ドクジリアン柔術少女 すから☆ぱいそん
代表 嶋田大貴のブログです。写真は神仏に見せ金をはたらく罰当たりの図