1

回復戦略の助けを借りることができます。どういうわけか、1 つのコミットで約 3 日分のコミットが失われるという状況になりました。そして押された。コミッターは、プッシュを強制したのか、それとも何をしたのかはわかりませんが、現在、私たちはこの立場にあります。そして、「悪い」ものから約 10 件の追加のコミットがプッシュされました。

古いコミットはすべてそこにあり、すべてをつなぎ合わせることができましたが、Git が助けてくれることを願っています。ポイントAとポイントBの間のコミットの範囲をチェリーピックできると思いますが、もっと良いものはありますか? すべてではありませんが、ほとんどの変更は 1 つのディレクトリにローカルであり、それぞれを手動で検査したくありません。

すべてが上流にプッシュされたことを思い出して、ここで正しいアプローチは何ですか?

4

3 に答える 3

3
git reset --hard <one commit before the bad commit>
git cherry-pick <the range of commits you've lost>
git pull

このようにして、最後の適切なコミットにいることをシミュレートします ( を使用reset)。次に、ローカルで新しいコミットを作成します ( cherry-pick)。ここで、変更を取り込みます (場合によっては競合をマージします)。

于 2013-05-02T16:40:12.127 に答える
1

git reflogアップストリームまたはローカル リポジトリのチェックに興味があるかもしれません。コミットが失われたように見えても、ブランチ ポインターがないだけで、実際にはリモート/ローカル リポジトリに残っている可能性があります。彼らは永遠にそのようにとどまることはありませんが、gitはデフォルトで2週間ごとにガベージコレクションを行うと思います:

オプションの構成変数 gc.pruneExpire は、参照されていないルーズ オブジェクトがプルーニングされるまでの経過時間を制御します。デフォルトは「2 週間前」です。

Pro Git §9.7: Maintenance and Data Recoveryで、reflog を使用して失われた作業を回復する方法について詳しく読むことができます。

reflog でコミットを見つけた場合 (または でそれらを探したい場合git fsck --full)、それらにブランチ ポインターをアタッチしてそれらを「回復」できます。次に、必要なコミット履歴ツリーを (再) 構築するために、新しいコミットを上に置きたい場合がありrebaseますcherry-pick

于 2013-05-03T04:04:55.157 に答える