Git でマージコミットを元に戻す
場合によっては、2つ以上のブランチをマージしてから、コミットを目的のブランチにプッシュする必要があります。しかし、そのリポジトリでそのマージは必要ないことがわかりました。そこで、ここでの問題は、すでにプッシュされているマージコミットを元に戻すか元に戻す方法です。心配することはありません。Git には、この問題に対する優れたソリューションがあります。これについては、以下で説明します。
問題に応じて、この状況に対処する 2つの方法があります。1つは、リポジトリにまだプッシュされていないが、コミットされていることです。もう 1つは、コミットされ、両方がリポジトリにプッシュされることです。両方の状況について以下で説明します。
プッシュされない Git コミットを元に戻す
Git でコミットを直接元に戻すことはできません。それにもかかわらず、コミットを元に戻す前に、コミットをチェックアウトする必要があります。元に戻した後、作業ディレクトリの位置は、コミットをプッシュする前の作業ディレクトリの位置と同じになります。
これで、git reset
コマンドを適用して、インデックスポインタを元の場所に戻すことができます。コミット前の位置。たとえば、コミット Commit1
と Commite3
の変更を保持したいが、コミット Commit2
の変更を元に戻したい場合は、このコマンドを実行します。
git reset HEAD~3
このコマンドは、コミット Commit2
の前の位置にインデックスポインタを返します。コミットを元に戻した後、変更したファイルを作業ディレクトリに再度追加する必要があります。たとえば、次のコマンドを実行します。
git checkout Commit1
git add Commit1
git checkout Commit3
git add Commit3
git commit
その後、コミット Commit1
と Commit3
をリモートリポジトリにプッシュできます。
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 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 のリセット、元に戻す、およびチェックアウト コマンドの違い
- Git リバート コミット ローカル
- Git リポジトリを以前のコミットに戻す
- Git でローカルの変更を以前の状態に戻す
- Git のリポジトリで以前のコミットに戻す