2011-08-02 16 views
3

誰かが偶然に80メガバイト相当のJPGを私たちのgitリポジトリにチェックインし、それをgithub中央リポジトリにプッシュしました。Gitリポジトリからファイルを削除する、Githubとコミッタ

これらの変更を行ってから数人が参加しました。

コミッタの撮影以外に、リポジトリの履歴とgithubからこれらの画像を完全に削除するにはどうすればよいですか?そして、他のコミッターにすべての変更を与える。

答えて

1

より根本的なアプローチは、filter-branchを使用しています。あなたはVERY慎重にこれを使用するときに、あなたが本当に台無しあなたのレポをすることができますようにする必要がありますしかし

git filter-branch --tree-filter 'rm -f *.jpg' HEAD 

。何かをする前にdocsを確認してください。

+0

私はこれを最後に使用しなければなりませんでした。 – iBiryukov

0

git resetを使用して、コミット前の変更を元に戻します。私は、すでに変更を取り込んだ人のために更新を強制することは可能ではないと思います。二思想に

git reset --hard HEAD~3 ## will reset the head to three commits ago 

、ドキュメントは言う:

最後の三つのコミット(HEAD、HEAD ^、およびHEAD〜2)が悪かったとあなたはそれらを再度見たいと思って はありません。これらのコミットがすでに他の人に与えられている場合は、すでに を持っていれば、これをしないでください。

tl; dr - ファイルを削除するだけです。歴史を取り除くことができ、gitのような分散システムで何かを強制的に更新することはできません。

4

git reset sha_of_last_good_commitで変更を修正するには、これらのバックアップをgit push -fでプッシュする必要があります。新しい変更を元に戻すよう全員に伝える必要はありません。

  • あなたが悪いコミットと混ざり維持したい変更がある場合、あなたはあなたのが戻ってgithubのまでレポを固定プッシュする前に、あなたはしたくないものを摘み取るためにgit rebase -iにする必要があります。

  • ガベージコレクションは、最終的にぶら下がってオブジェクトを削除しますか、git gc --aggressive

+0

プルーサーは非常に注意する必要があります。そうでなければ、コミットを再導入するだけです。代わりにそれらを再クローンした方がいいです。彼らは彼らの古い地元のレポを保存することを確認してください、彼らは持っている可能性があります未払いの仕事を失うことはありません。 – Tekkub

0

でもあなたの場合git reset --hard HEAD~3、そして問題が解決されていない、その後git push --forceでそれを強制することができます。 gpojdとして

を引用している:あなたはすでに

他の誰かにこれらのコミットを与えている。しかしまあ、あなたがやった場合

はこれをしないでください。変更したバージョンを中央のレポにプッシュし、中央のレポから3つの悪用されたコミットを含むバージョンをフェッチしたユーザーには、3つの悪いコミットがレポに残っています。

3つの悪質なコミットが存在するときにレポから引き出されたすべての人は、それらの間違ったコミットを元に戻す必要があります。

ので、強制的に1をプッシュして、彼らが削除する必要がありますコミットのSHA-IDを教えて、あなたに自分のmasterブランチをリベースするgit rebase -i origin/master(GitHubのからのバージョンを取得するために)コンソールを起動し、git fetch originを使用するためにそれらを教えてください。

関連する問題