1. ホーム
  2. git

[解決済み] Git リベースをロールバックする方法

2022-06-03 04:29:36

質問

Git では、リベースに満足できない場合、どのようにロールバックしますか?

Git には、リベースのためのドライランがありません。リベースを行い、まだプッシュしていない場合、どうすれば何もなかったかのように以前の状態にロールバックできるのでしょうか。

どのように解決するのですか?

あなたは リフロ を使って、リベースが始まる前の最初のアクションを見つけて、 --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

これで、リベースが始まる前に戻ったはずです。

リセットする正しい場所を見つけるには、一番上にある がない で始まっていない一番上のエントリを選ぶだけです。

更新:コメントや他の回答で紹介されているように 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をオリジンブランチにリセットすることもできます。

$ git reset --hard origin/my-branch

もし、他の未プッシュのコミットがあるときにこの操作をしたのなら、それらを失ってしまうことになります。その場合、コミットを行った reflog エントリにジャンプするために、上記の reflog アプローチを使用するだけです。