Gitマージを元に戻す方法
Gitを使っていると、間違ったことを偶然にするのは非常に一般的ですが、幸いなことに、リポジトリのバージョン履歴を追跡するように作られています。
Gitを使っていると、誤って間違ったことをするのは非常に一般的ですが、幸いなことに、リポジトリのバージョン履歴を追跡するために作られています。行った変更を元に戻す方法は常にあり、Gitのマージを元に戻したい場合は、かなり簡単です。
Gitマージの取り消し
基本的に、これを進めるには2つの方法があり、そのすべては、変更をソース管理にプッシュしたかどうかによります。すでにGitHubのようなサービスにコミットしてプッシュしている場合、一般的には変更は不変と見なされます。強制プッシュをしたいのでなければ、それは危険です。コミットを「削除」することは決して望んではいけませんし、gitのマージは「マージコミット」として追加されます。変更を安全に元に戻すためにgit revertを使用し、その元に戻したものを新しいコミットとしてコミットします。
しかし、もしローカルで何かを間違えてしまい、キーボードに悪態をつき、解決策をグーグルしただけであれば、マージコミットを安全に削除し、シンプルなgit resetでGitの履歴をクリーンに保つことができます。
ローカルでリセットする
Gitのリセットを扱うのは、GUI Gitクライアントを使うのが最も簡単で安全です。そこでブランチの履歴を簡単に見ることができます。もちろん必須ではありませんが、複雑なブランチがある場合、視覚的な情報は役立ちます。
この例では、機能ブランチをメインブランチにマージする操作を元に戻したいと思います。機能ブランチは実際には変更されていないので、「メイン」ブランチのラベルを最後のコミットを指すようにリセットしたいと思います。
これを行うために、私たちはメインブランチをgit checkoutし、次に前のコミットにリセットしたいと思っています。このための省略形はHEAD^で、最後のコミットにハードリセットを実行できます。「破壊的」リセットに慣れていない場合は、ソフトリセットを行い、その後マージコミットの変更を手動で破棄することができます。
git reset --hard HEAD^ご覧の通り、これによりマージコミットが完全に削除され、フィーチャーブランチは手付かずのまま残ります。
リセットする必要があるコミットがブランチの現在のHEADの直前のものではない場合、そのSHA1 IDをコピーして、その特定のコミットにリセットすることができます。
既にプッシュされたコミットを元に戻す
残念ながら、すでにプッシュしてしまった場合、リポジトリの履歴を上書きせずにマージコミットを削除する方法はありません。上記の手順を同じように行い、--forceフラグを使ってアップストリームリポジトリ(GitHubなど)にプッシュすることができます。しかし、これは一般的に破壊的で、複数のコラボレーターがいる場合には安全ではないと見なされます。なぜなら、全員が自分のローカルリポジトリを更新する必要があるからです。
Gitでコミットを元に戻すもう一つの方法は、それをリバートすることです。コミットをリバートすると、リポジトリに対して逆の変更が適用されます---追加された行はその行が削除され、削除されたものは再度追加される、という具合です。これにより実質的にコミットが逆転しますが、このプロセスによりバージョン履歴が少し散らかるという欠点があります。ただし、一般的には、これは間違いを修正するための良い手法です。
コミットを元に戻すことは非常に簡単です。最初に、git logを実行して、コミットのリストとそのID番号を取得する必要があります。
次に、SHA1ハッシュをコピーし、git revertを使用してコミットを戻すことができます:
git revert 62ff517cc7c358eaf0bffdebbbe1b38dea92ba0fこの新しい「リバートコミット」をGitHubにプッシュする必要があります。この問題を解決するためです。




