Git操作を正しく覚えたい方へ
「Git mergeの取り消し方を知りたい」そんなあなたに向けて、この記事ではmergeのやり直し方法やrevertとの違いをわかりやすく解説します。
・Git mergeを間違えて戻したい方
・revertとの違いがわからず困っている方
・安全な取り消し方法を学びたい方
「どの方法を使えばいいの?」「初心者でも大丈夫?」と不安な方でも大丈夫。
手順について詳しくご紹介していきます。
Git mergeとは?まずは基本をおさらい
Git mergeの役割とよくある利用シーン
Git mergeは、2つのブランチの履歴を統合するために使用される基本操作です。
開発ブランチとmainブランチを合流させるときなど、頻繁に使われます。
主な利用シーン
- 機能開発ブランチをmainに統合したいとき
- チームメンバーの作業をまとめるとき
間違えやすいポイントとは?
mergeには、実は複数の挙動があります。
特に初心者がつまずきやすいのが、fast-forward
とno-ff
の違いです。
- fast-forward:履歴をそのまま進めるだけ。履歴がスッキリします。
- no-ff:マージコミットが生成され、履歴が明確に残るのが特徴。
Git mergeを取り消す3つの方法
1. git reset
で履歴ごと取り消す
--soft・--mixed・--hard
の違いと使い分け--soft
:コミットだけ取り消す(ステージ済み)--mixed
:ステージも取り消す(ファイルはそのまま)--hard
:すべて取り消す(完全に元に戻す)
2. git reflog
で元の状態に戻す
reflog
を使えば、過去の状態を一覧で確認して、任意の時点へ戻ることができます。誤操作後でも柔軟に対応可能です。
3. git revert
で変更を打ち消す(履歴は残す)
履歴を残したまま、特定のコミットの影響だけを取り消したいときに便利です。特にチーム開発ではこの方法が安全です。
revertとの違いをわかりやすく解説
revertは「履歴を打ち消す」操作
履歴には残しつつ、マージなどの変更を「逆の差分」で取り消します。ログに「revert: …」と記録されるため、後からも追跡できます。
resetは「履歴をなかったことにする」操作
完全に履歴ごと削除します。個人のローカルで使うなら有効ですが、共有リポジトリでは注意が必要です。
チームで作業中はrevertが安全な理由
resetは「履歴をなかったことにする」ため、他のメンバーの作業と不整合が生じやすくなります。安全に取り消したい場合はrevertを選びましょう。
よくあるGit merge取り消しの4つのケース
ケース1:マージ中にコンフリクトが起きたけど、やっぱりやめたい!
マージ中に予期せぬコンフリクトが発生して、まだ何も編集していない場合は以下でキャンセルできます。
git merge --abort
ポイント: 編集前であれば、このコマンド1つでマージ前の状態に戻せます。
ケース2:コンフリクト解消後にやっぱりマージをやめたい…
編集を加えてしまった後でも、マージ自体をキャンセルしたい場合は下記でOK。
git reset --hard HEAD
ポイント: 編集とマージ作業をまとめて取り消したいときに便利です。
ケース3:マージ後に「やっぱやめたい」→revertで対応
マージコミットまで完了したあとに「やめたい」となった場合、以下のコマンドで履歴を保ったまま変更を打ち消せます。
git revert -m 1 <merge_commit>
※-m
の数字で「親ブランチ」がどちらかを指定する必要があります。
注意点: 一度revertしたマージコミットと同じ内容を、再びマージすることはできなくなります。
ケース4:マージ後に完全に履歴ごと消したい
履歴も含めて完全に取り消したい場合はreset
で対応します。
git reset --hard ORIG_HEAD
注意: これはコミット履歴ごと削除されるため、push済みの履歴に対して使うと他の開発者に影響を及ぼします。ローカル限定で使うようにしましょう。
取り消し操作の注意点とトラブル回避
共同作業中にresetを使うべきでない理由
共有リポジトリではresetは慎重に。履歴改変が他の人の作業を壊す可能性があります。
作業前にgit status
やgit log
を確認する習慣
操作ミスを防ぐ第一歩は「今どんな状態か?」を確認することです。
操作ミスを防ぐための練習法
練習用のブランチやリポジトリで実験するのがオススメです。怖がらずに練習してみましょう。
まとめ|状況に応じて正しく取り消そう
今回紹介した3つの方法を振り返り
- reset:完全に戻す(注意が必要)
- reflog:自由度が高い履歴戻し
- revert:安全な取り消し(履歴を残す)
「revert or reset」判断のコツ
- チームで共有しているならrevert
- ローカル作業のみならresetもOK
安心してGit操作を続けるために
トラブルがあっても、正しい知識があれば大丈夫です。ぜひ本記事をブックマークして、困ったときの参考にしてください。
コメント