2

私は Git を使い始めたばかりで、ある特定のケースについて疑問に思っていました。

誤って重いコミットをしてしまい、さらに悪いことに、それをリモート サーバーにプッシュしてしまいました。

git reset --hard v1.0今、私は と を使用して、元の状態に戻そうとしていgit push -f origin masterます。

それを行った後は問題ないように見えますが、レポファイルのサイズを見ると、間違ったコミットと同じくらいの大きさです。git gcでガベージ コレクションを試みても、成功しません。その場合、意図的に破壊的な変更を加えたい場合はどうすればよいですか?

どんなヒントでも大歓迎です!

4

4 に答える 4

3

履歴を変更した可能性がありますが、クリアしていないのは reflog です。

次のように入力します。

git reflog

「大きなコミット」がまだそこにあることがわかります。デフォルトでは、すべてのエントリは到達不能の場合は 30 日間、到達可能の場合は 90 日間 (履歴を介して) 保持されます。

たとえば、試して使用することができgit reflog --expire-unreachable=1.minuteます。

于 2013-01-10T20:26:48.000 に答える
2

巻き戻したブランチの reflog と HEAD reflog を期限切れにする必要があります。その後、gc は到達不能になったコミットを収集できます。

git reflog expire --expire=now HEAD <branches which contained said commit>
git gc

reflog は、以前のブランチの状態を追跡する Git の安全メカニズムであり、誤った git reset コマンドを発行したり、偽のリベースを実行したりしても、すぐにデータが失われることはありません。

于 2013-01-10T20:27:11.347 に答える
1

最も簡単な解決策は、リポジトリのクローンを再作成することです。ただし、リポジトリが大きい場合は時間がかかることがあります。プロジェクトを再度複製せずにファイルを削除するには、一定時間待ってgitがファイルを自動的に削除するか、次のコマンドを使用してファイルを強制的に削除します。

git reflog expire --all --expire-unreachable=0
git repack -A -d
git prune
于 2013-01-10T20:31:39.470 に答える
1

最初に言った手順を繰り返して、レポの新しいクローンを作成しましたが、今は問題ありません。君たちありがとう!

于 2013-01-11T14:06:56.747 に答える