Git では、リベースに満足できない場合、どのようにロールバックしますか?
Git にはリベースのドライランがありません。リベースを実行してまだプッシュしていない場合、何も起こらなかったかのように以前の状態にロールバックするにはどうすればよいでしょうか?
ベストアンサー1
あなたは再ログリベース開始前の最初のアクションを見つけて、--hard をそれに戻します。例:
$ git reflog
b710729 HEAD@{0}: rebase: some commit
5ad7c1c HEAD@{1}: rebase: another commit
deafcbf HEAD@{2}: checkout: moving from master to my-branch
...
$ git reset HEAD@{2} --hard
これで、リベースが開始される前の状態に戻るはずです。
リセットする正しい場所を見つけるには、一番上のエントリを選択するだけです。しない「rebase」から始めます。
ORIG_HEAD
更新: コメントや他の回答で述べたように、リセットする場所を見つけるための簡単な方法として以下を使用することもできます:git reset ORIG_HEAD --hard
代替アプローチ
リベースがそれだけブランチで実行した操作がすべて完了し、プッシュされていないコミットや変更がない場合は、次のコマンドでローカル ブランチを削除してgit branch -D
、再度チェックアウトすることができます。
$ git checkout my-branch
$ git rebase master
// not happy with the result
$ git checkout master
$ git branch -D my-branch
$ git checkout my-branch
または、同じ効果を得るために、--hard を origin ブランチにリセットすることもできます。
$ git reset --hard origin/my-branch
プッシュされていないコミットがあるときにこれを行った場合、それらのコミットは失われます。その場合は、上記の reflog アプローチを使用して、コミットを行った reflog エントリに戻ります。