このコマンド
git push -f https://github.com/userid/reponame.git <commit-sha>:<branch-name>
を使用しましたリモートでコミットをプッシュするため。しかし、それはそのブランチの7つの以前のコミットを削除しました。
それらのコミットを復元したり、この変更を元に戻す方法はありますか?ありがとう。
編集:私が使用したSHAはマージされたコミットのものであり、プッシュする前にそのブランチをフェッチしていません。
回答 2 件
次を使用できます。
$ git reflog origin/branch-name
origin/branch-nameの移動を出力し、対応するコミット番号を取得します。
を使用して:
$ git show commit-number
最後に失われたコミットを取得し、チェックアウトして新しいブランチを再作成できます。
関連した質問
- githubブランチのファイルを別のブランチで更新するにはどうすればよいですか?
- コマンドラインを介してGPG署名を使用してプルリクエストをどのようにスカッシュおよびマージしますか?
- 次のパスは、gitignoreファイルの1つによって無視されます
- gitによって変更された、追加されたがコミットされていないファイルを復元する方法
- Gitログの正確なフレーズをgreppingするための正規表現
- Vimがコミットメッセージの保存に失敗する
- GitHubのプロジェクトがGitHubのフォークの親から分岐したタイミングを見つける
- jenkins-githubクローンがkex algエラーなしで失敗する
- GitHubが1つのプロジェクトのコミットのカウントを停止しました
- 追跡されていない作業ツリーファイルをフォローしていますか?
もしプッシュしたサーバー reflogが有効になっていない(これがほとんどのサーバーの通常のデフォルトである)場合、それらのコミットはサーバーから消えた、少なくともGit自体が関係している限り。 (サーバーにはバックアップがある場合があり、それらのバックアップには何らかの形でコミットがある場合がありますが、そうかどうか、およびそれらを復元する方法はこのコミュニティの範囲外です:-) —serverfault.comが必要です。
サーバーにログインできる場合は、運がよければサーバーにreflogsまたは
git gc
があるかどうかを確認できます。 まだコミットを削除していません。これらはどちらもありそうにありませんが、不可能ではありません(特に、着信コミットに「隔離領域」を使用する新しいGitバージョンでは、一部はgit gc
をすぐに実行する必要を回避するために行われました) 各アップロードを受信した後)。git fetch
をお持ちでない場合 それらのコミットをedあなた自身の リポジトリに保存されるため、それらのコミットは自分のリポジトリには存在しませんが、これらのコミットは引き続き自分のリポジトリに存在しません。彼らは決して存在しなかった場所からは回復できません。大きな場所ではありますが、見る場所はあと1つだけです。これまで
git fetch
を実行した他のすべてのコンピューター サーバーから。 あなたは幸運になり、その1つを見つけるかもしれませんこれら マシンにはコミットがあります。その場合、そのマシンからコミットを取得できます。そうでない場合、コミットは永久に失われます。