Git でマージを元に戻す

Azhar Bashir Khan 2022年4月12日
Git でマージを元に戻す

このチュートリアルでは、Git でマージを元に戻す方法について説明します。

Git では、あるブランチを別のブランチとマージして、他のブランチからの変更を現在のブランチの HEAD に統合します。

場合によっては、このマージを元に戻したいことがあります。Git コマンド git reset を使用して、git マージを元に戻すことができます。

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

Git で git reset を使用してマージを元に戻す

ブランチ viz をマージしたとします。feature1main ブランチを使用して、そのブランチからの変更を main ブランチに統合します。

ここで、このマージを元に戻すことにしました。これには git reset を使用できます。

まず、Git のログからマージ前の commit sha を見つける必要があります。これには、git log コマンドを使用できます。

次のように git log コマンドを実行します。

$ git log --oneline
0e25143 Merge branch 'feature1'
23ad9ad Add the initial code base

0e25143 は、feature1 ブランチから main ブランチへのマージの commit sha であることがわかります。23ad9ad は、ブランチ feature1 をマージする前のコミットの commit sha です。

git reset コマンドを --hard オプションとともに使用して、main ブランチをマージ前の状態にリセットします。

git reset コマンドの構文は次のとおりです。

git reset --hard commit_sha_before_merge

次のように git reset を実行します。

$ git reset --hard 23ad9ad

したがって、マージを元に戻しました(つまり、現在のブランチの HEAD をリセットしました)。マージ前のコミットへの main

上記の git reset コマンドを実行すると、コミットされていない変更や隠されていない変更は失われることに注意してください。

特に最後のコミットがマージの場合は、次のように git reset コマンドを使用することもできます。

$ git reset --hard HEAD~1

1 回のコミットで現在のブランチの HEAD をリセットします。

同様に、次のようにすることもできます。

$ git reset --hard ORIG_HEAD

ORIG_HEAD は、マージが行われる前のコミットを指します。

より安全なオプションは、次のように --merge オプションを git reset とともに使用することです。

$ git reset --merge ORIG_HEAD

git reset コマンドを使用した --merge オプションにより、インデックスがリセットされ、commit と HEAD の間で異なるファイルが更新されます。ただし、インデックスと作業ツリーの間で異なるファイルの変更(つまり、まだインデックスに追加されていない変更)は保持されます。

関連記事 - Git Reset

関連記事 - Git Merge