Gitを使っていると、間違えてリベース(rebase)をしてしまうことがあります。そんなときに便利なのがgit reflog
コマンドとgit reset
コマンドです。
この記事では、git reflog
コマンドとgit reset
コマンドを使って間違えてリベース(rebase)したのを元に戻す方法を解説します。
間違えたgit rebaseを元に戻す方法
間違えて以下のコマンドを実行し、main
ブランチの最新状態をfeature
ブランチに取り込んでしまったとします。
git rebase main
その場合には、まずgit reflog
コマンドで操作履歴を確認します。
$ git reflog
97bf9cc (HEAD -> feature) HEAD@{0}: rebase (finish): returning to refs/heads/feature
97bf9cc (HEAD -> feature) HEAD@{1}: rebase (pick): [feature]C
9560fd9 HEAD@{2}: rebase (pick): [feature]B
d0bc713 (main) HEAD@{3}: rebase (start): checkout main
e291d1d HEAD@{4}: checkout: moving from main to feature // ← rebase 開始前のココ戻りたい
…
次に、操作履歴を戻すためにgit reset
コマンドを使用します。git reset
コマンドで戻りたい位置を「HEAD@{n}
」または「コミットのハッシュ値(コミットID)」で指定します。今回は、git rebase
コマンド実行前の状態に戻したいので、HEAD@{4}
に戻します。以下のコマンドを実行してください。
# HEAD@{n}でgit rebaseコマンド実行前の状態に戻す場合の構文
git reset --hard "HEAD@{n}"
# 今回、git rebaseコマンド実行前の位置はHEAD@{4}なので以下のコマンドを実行する
git reset --hard "HEAD@{4}"
引用符を使わない場合、シェルによっては {
や }
が特殊文字として解釈され、コマンドが正しく実行されないことがあります。そのため、引用符で囲むことにより、シェルが特殊文字を解釈するのを防いでいます。
これでgit rebase
コマンド実行前の状態まで戻ることが出来ます。なお、コミットのハッシュ値(コミットID)でgit rebase
コマンド実行前の状態に戻す場合には以下のコマンドを実行します。
# コミットのハッシュ値(コミットID)でgit rebaseコマンド実行前の状態に戻す場合の構文
git reset --hard <commit-hash>
# 今回、git rebaseコマンド実行前のコミットのハッシュ値はcb0a55a4eなので以下のコマンドを実行する
git reset --hard cb0a55a4e
あわせて読みたい
『git rebaseコマンドの基本的な使い方』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 続きを見るgit rebaseとは?「使い方」などを図を用いて分かりやすく解説!
本記事のまとめ
この記事では『間違えたgit rebaseを元に戻す方法』について、以下の内容を説明しました。
git reflog
コマンドで操作履歴を確認する- 操作履歴を戻すために
git reset
コマンドを使用する
お読み頂きありがとうございました。