2016-04-18 14 views
1

私のチームメンバーの1人が、誤ってgit server上に大量かつ多数のファイルを一度にコミットしプッシュしました(5 Gbyte)。それは1つのコミットです。

他のすべてのチームメンバーは、遅すぎるためにgitアップデートを取得できません(おそらく5〜6時間かかります)。だから私はコミットをまだ更新できないので、ローカルマシン上のコミットを削除できないと思います。 (git revert、git resetなど)残念なことに、彼女は仕事をやめたので、彼女のローカルマシンにアクセスすることはできません。
git repoサーバーでgit commitを削除または元に戻す

しかし、私たちはシェルを使ってgit repoサーバーにアクセスできます。

project3.git 

とフォルダです。

HEAD config description hooks info objects packed-refs refs 

だからそれが可能だ場合、我々は、コミットまたは復帰または削除するサーバー上で直接シェルコマンドを使用してファイル。その後、私たちのチームメンバーは更新プログラムを入手する必要はありません。
これを行う方法はありますか?

更新:コミット名を知っています。 EX)33aedaf55e

+0

最初に 'git log'をチェックして最新のコミット名を確認してください –

+0

Thanks Muhammad、私はスレッドに答えを追加しました。 –

+0

これは5GBのファイルを持つ不正なコミットです。それ以前のもの? –

答えて

3

注:あなたが何かをする前に、リモートリポジトリのコピーをバックアップ必要があります!

リモートレポに支店をリセットする場合:リモートリポジトリで 、最近の歴史を示しています。git log -3

* 33aedaf - (HEAD, master) commit with big file 
* f18fd52 - some other commit 
* 160c78f - another commit 

以前に分岐REF(ここでは、マスターを仮定)を設定し、コミット:git update-ref refs/heads/master f18fd52 その後、マスターブランチ上でgit fetchを実行しても、大きなファイルはフェッチされません。私たちがしたことは、git reset --hard f18fd52に似ていました。

大きなファイルはまだリモートリポジトリに保存されています。到達不能オブジェクトをリストすることができます。git fsck --unreachable 到達不能オブジェクトをすべて削除します:git gc --prune=all。これはすべての到達不能オブジェクトを削除するので、最初にブランチポインタが正常に見えることを確認してください。

私たちが行ったことは、本質的に歴史を書き換えていたことに注意してください。誰かが既に大きなファイルでコミットを引っ張って作業を開始した場合、コミットをプッシュしようとすると新しい問題が発生する可能性があるので、レポを担当しているすべての同僚に、

+0

それは魅力のように動作します。 :) –