ID 56f06019でコミットしています(たとえば)。そのコミットで私は誤って大きなファイル(50Mb)をコミットしました。別のコミットでは、同じファイルを適切なサイズ(小さい)で追加します。今私が複製したときの私のレポは重すぎる:(私のレポのサイズを減らすためにレポ履歴からその大きなファイルを削除する方法?
ID 56f06019でコミットしています(たとえば)。そのコミットで私は誤って大きなファイル(50Mb)をコミットしました。別のコミットでは、同じファイルを適切なサイズ(小さい)で追加します。今私が複製したときの私のレポは重すぎる:(私のレポのサイズを減らすためにレポ履歴からその大きなファイルを削除する方法?
回答:
Pro Gitブックの第9章には、オブジェクトの削除に関するセクションがあります。
ここで手順を簡単に説明しましょう。
git filter-branch --index-filter \
'git rm --cached --ignore-unmatch path/to/mylarge_50mb_file' \
--tag-name-filter cat -- --all
前述のリベースオプションと同様に、filter-branchリライト操作です。履歴を公開している場合は--force、新しい参照をプッシュする必要があります。
このfilter-branchアプローチは、rebaseアプローチよりもかなり強力です。
filter-branch バックアップも保持するため、reflogsとガベージコレクションを期限切れにしない限り、リポジトリのサイズはすぐには減少しません。
rm -Rf .git/refs/original # careful
git gc --aggressive --prune=now # danger
git filter-branch --force --index-filter 'git rm --ignore-unmatch --cached PathTo/MyFile/ToRemove.dll' -- fbf28b005^.. その後rm --recursive --force .git/refs/original、rm --recursive --force .git/logs 私はを使用しましたがgit prune --expire now 、git gc --aggressive これは上記の正確な手順よりもうまく機能しました。貴重なGit Proブックへのリンクを含めていただき、ありがとうございます。
git-extrasツールを使用できます。抹消コマンドは完全に過去のコミットやタグを含め、リポジトリからファイルを削除します。
インタラクティブモードでgit rebaseを実行する必要があります。ここで例を参照してください。GitHubでコミットを削除するにはどうすればよいですか?そして古いコミットを削除する方法。
コミットがHEAD-10コミットの場合:
$ git rebase -i HEAD~10
履歴の編集後、「新しい」履歴をプッシュする必要があります。+強制するを追加する必要があります(プッシュオプションの refspecを参照):
$ git push origin +master
他の人がすでにリポジトリを複製している場合は、履歴を変更しただけなので、通知する必要があります。
git push --forceか、git push -f(分岐プッシュターゲットを知っている人を必要としない)
git rm、パス上で直接使用できない理由です。
私はwindows https://stackoverflow.com/a/8741530/8461756で次の回答を使用してみました
一重引用符はWindowsでは機能しません。二重引用符が必要です。
以下は私のために働いた。
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch PathRelativeRepositoryRoot / bigfile.csv"---all
大きなファイルを削除した後、変更をgithub masterにプッシュすることができました。