Git でリベースの取り消し

Azhar Bashir Khan 2022年4月12日
Git でリベースの取り消し

このチュートリアルでは、Git のブランチで行われた rebase を元に戻す方法について説明します。

リベースとは、ブランチのベースを新しいベースに移動する操作です。メインブランチに基づく機能ブランチがあるとします。次に、メインブランチにいくつかの新しいコミットがあります。これらの新しいブランチに基づいて、機能ブランチをリベースしたい場合があります。

この rebase 操作を再考するかもしれません。新しい機能ブランチをメインブランチの新しいコミットに基づいて作成する必要はなくなりました。

機能ブランチは、メインブランチから最初にブランチしたときのコミットに基づいている必要があります。したがって、これを実現するには、ブランチで実行された rebase 操作を元に戻す必要があります。

これを例を挙げて説明します。

Git のブランチで git refloggit reset を使用して行われた rebase を元に戻する

main ブランチがあり、その上に新しいブランチ feature1 を作成したとします。

そして、main ブランチでいくつかのコミットが発生したとしましょう。これらの新しいコミットに基づいて、新しいブランチ feature1rebase を実行しました。これは元に戻したい操作です。

rebase を元に戻すには、Git の reflog コマンドを使用できます。git reflog を使用すると、rebase が開始する直前にブランチのヘッドコミットを決定できます。

次に、ブランチ feature1rebase が実行されたブランチ)で git reflog コマンドを実行します。

$ git reflog

b745978 HEAD@{0}: rebase: that commit
4sd7c1c HEAD@{1}: rebase: this commit
adf3d3d HEAD@{2}: checkout: moving from main to feature1
...

HEAD@{2}rebase 操作の直前のコミットであったことがわかります。

次のように、git reset を使用して、このコミットへのブランチをリセットできます。

$ git reset HEAD@{2} --hard

上記のコマンドを実行すると、ブランチ feaure1rebase の直前の状態になります。

または、次のように git reset を使用して rebase を元に戻すこともできます。

$ git reset --hard ORIG_HEAD

ORIG_HEAD は、操作前の HEAD の位置を記録するために HEAD を大幅に移動するコマンドによって作成されます。これにより、ブランチの先端を実行前の状態に簡単に戻すことができます。

この代替アプローチの注意点は、ORIG_HEAD を変更する可能性のある不要な rebase の後に他の操作を実行してはならないということです。resetrebase、または merge

したがって、これらのメソッドを使用して、Git のブランチで不要な rebase を元に戻すことができます。

関連記事 - Git Rebase