bugfix> git > 投稿

このコマンド git push -f https://github.com/userid/reponame.git <commit-sha>:<branch-name> を使用しましたリモートでコミットをプッシュするため。しかし、それはそのブランチの7つの以前のコミットを削除しました。

それらのコミットを復元したり、この変更を元に戻す方法はありますか?ありがとう。

編集:私が使用したSHAはマージされたコミットのものであり、プッシュする前にそのブランチをフェッチしていません。

回答 2 件
  • もしプッシュしたサーバー reflogが有効になっていない(これがほとんどのサーバーの通常のデフォルトである)場合、それらのコミットはサーバーから消えた、少なくともGit自体が関係している限り。 (サーバーにはバックアップがある場合があり、それらのバックアップには何らかの形でコミットがある場合がありますが、そうかどうか、およびそれらを復元する方法はこのコミュニティの範囲外です:-) —serverfault.comが必要です。

    サーバーにログインできる場合は、運がよければサーバーにreflogsまたは git gc があるかどうかを確認できます。  まだコミットを削除していません。これらはどちらもありそうにありませんが、不可能ではありません(特に、着信コミットに「隔離領域」を使用する新しいGitバージョンでは、一部は git gc をすぐに実行する必要を回避するために行われました)  各アップロードを受信した後)。

    git fetch をお持ちでない場合 それらのコミットをedあなた自身の リポジトリに保存されるため、それらのコミットは自分のリポジトリには存在しませんが、これらのコミットは引き続き自分のリポジトリに存在しません。彼らは決して存在しなかった場所からは回復できません。

    大きな場所ではありますが、見る場所はあと1つだけです。これまで git fetch を実行した他のすべてのコンピューター  サーバーから。  あなたは幸運になり、その1つを見つけるかもしれませんこれら マシンにはコミットがあります。その場合、そのマシンからコミットを取得できます。

    そうでない場合、コミットは永久に失われます。

  • 次を使用できます。

    $ git reflog origin/branch-name
    
    

    origin/branch-nameの移動を出力し、対応するコミット番号を取得します。

    を使用して:

    $ git show commit-number
    
    

    最後に失われたコミットを取得し、チェックアウトして新しいブランチを再作成できます。

あなたの答え