Git でマージコミットを元に戻す

Abdul Jabbar 2023年1月30日
  1. プッシュされない Git コミットを元に戻す
  2. すでにプッシュされている Git コミットを元に戻す
Git でマージコミットを元に戻す

場合によっては、2つ以上のブランチをマージしてから、コミットを目的のブランチにプッシュする必要があります。しかし、そのリポジトリでそのマージは必要ないことがわかりました。そこで、ここでの問題は、すでにプッシュされているマージコミットを元に戻すか元に戻す方法です。心配することはありません。Git には、この問題に対する優れたソリューションがあります。これについては、以下で説明します。

問題に応じて、この状況に対処する 2つの方法があります。1つは、リポジトリにまだプッシュされていないが、コミットされていることです。もう 1つは、コミットされ、両方がリポジトリにプッシュされることです。両方の状況について以下で説明します。

プッシュされない Git コミットを元に戻す

Git でコミットを直接元に戻すことはできません。それにもかかわらず、コミットを元に戻す前に、コミットをチェックアウトする必要があります。元に戻した後、作業ディレクトリの位置は、コミットをプッシュする前の作業ディレクトリの位置と同じになります。

これで、git reset コマンドを適用して、インデックスポインタを元の場所に戻すことができます。コミット前の位置。たとえば、コミット Commit1Commite3 の変更を保持したいが、コミット Commit2 の変更を元に戻したい場合は、このコマンドを実行します。

git reset HEAD~3

このコマンドは、コミット Commit2 の前の位置にインデックスポインタを返します。コミットを元に戻した後、変更したファイルを作業ディレクトリに再度追加する必要があります。たとえば、次のコマンドを実行します。

git checkout Commit1 
git add Commit1  
git checkout Commit3 
git add Commit3
git commit

その後、コミット Commit1Commit3 をリモートリポジトリにプッシュできます。

git push

2つのブランチをマージしてから、ブランチの変更を元に戻す場合は、次のコマンドを使用できます。

git merge --abort

このコマンドは、マージプロセスをキャンセルするために使用されます。その後、変更をブランチに戻すことができます。このセクションで説明するコマンドは、最後のコミットまたは複数のコミットの効果を元に戻したい場合に役立ちます。

ただし、最後の 2つ以上のコミットの効果を元に戻したい場合は、作業ディレクトリを最後のコミット前の状態にリセットする必要があります。これは、1つ以上のコミットを直接元に戻すことができないためです。

すでにプッシュされている Git コミットを元に戻す

他のケースでは、マージコミットをリモートブランチにプッシュしてプッシュした場合は、変更を元に戻す新しいコミットを作成する必要があります。次のコマンドを実行します。

git revert -m 1 <merge-commit-hash>

これにより、前のマージコミットからの変更を元に戻す新しいコミットが開発されます。ただし、この新しいコミットには元のマージコミットからのすべての変更も含まれるため、コミットメッセージを編集して、これが復帰コミットであることを示す必要があります。私たちが言及したオプションに対して、-m 1 は、マージされたブランチを保持したいことを Git に通知します。

revert コマンドは作業ツリーを変更しません。インデックスを変更するだけです。revert コマンドには、コミットの元のメッセージを復元するオプションもあります。上記の例では、-m オプションを使用して、コミットの元のメッセージを復元します。revert コマンドを使用して、統合コミットから特定のファイルを復元することもできます。

Git revert は、変更を行い、その変更を保持したくないと判断した場合に、ローカルブランチで使用するのに便利なツールです。公共の支店での使用はお勧めしません。

ご存知のように、git revert は純粋にリバーシブルであり、変更を元に戻すことはできません。ブランチの現在のコミットではないコミットで gitrevert を実行する場合、git revert は新しいコミット ID を持つ新しいコミットを開発するため、非常に注意する必要があります。

後で git reset --hard を実行して、git revert が行った変更を元に戻す場合は、git revert で元に戻したコミットを作成した開発者が行った変更も削除されてしまいます。パブリックブランチで git revert を使用することは可能ですが、私の意見ではそうすることは良い考えではありません。変更を加えるために新しいブランチを開発し、完了したらそれを master ブランチにマージすることをお勧めします。

パブリックブランチで git revert を使用する場合は、そのブランチで作業しているのが私たちだけであることを確認してください。そうしないと、他の人の作業が取り消されます。

著者: Abdul Jabbar
Abdul Jabbar avatar Abdul Jabbar avatar

Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.

LinkedIn

関連記事 - Git Revert

関連記事 - Git Merge