症状
git merge 実行後にコンフリクトが発生し、解消作業を中止してマージ前の状態に戻したい
結論:まずこれを確認
git statusで現在の状態を確認する- マージ中なら
git merge --abortで中止できる - 作業中の変更がある場合は先に退避(stash)を検討する
操作フロー
flowchart TD
A[コンフリクト発生] --> B{git status で状態確認}
B --> C{Unmerged paths あり?}
C -->|Yes| D{作業中の変更を残す?}
C -->|No| E[マージは完了済み]
D -->|残さない| F[git merge --abort]
D -->|残したい| G[git stash で退避してから abort]
F --> H[マージ前の状態に戻る]
G --> H
E --> I[git reset で戻すか検討]
よくある原因
- コンフリクトの量が多すぎて手に負えない - 一度中止して戦略を練り直す
- 間違ったブランチをマージしてしまった - abort して正しいブランチを選び直す
- コンフリクト解消中に別の変更をしてしまった - 状態が複雑になり最初からやり直したい
- マージの方向を間違えた - feature を main にマージすべきところを逆にした
- リモートの最新を取り込んでからマージしたい - 一度中止して pull してからやり直す
操作手順
ステップ1: 現在の状態を確認する
git status
🔍 チェックポイント: 以下のような表示があればマージ中
On branch main
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
ステップ2: 未保存の変更を確認する
git diff
🔍 チェックポイント: コンフリクトマーカー(<<<<<<<, =======, >>>>>>>)の有無を確認
<<<<<<< HEAD
現在のブランチの内容
=======
マージしようとしたブランチの内容
>>>>>>> feature-branch
ステップ3: マージを中止する
git merge --abort
🔍 チェックポイント: 実行後に git status で clean な状態になっていることを確認
On branch main
nothing to commit, working tree clean
ステップ4: (任意)変更を退避してから中止する場合
コンフリクト解消中に行った変更を一時保存したい場合:
# 現在の変更を退避
git stash --include-untracked
# マージを中止
git merge --abort
# 必要なら退避した変更を戻す
git stash pop
⚠️ 注意: コンフリクト状態のファイルは stash できない場合がある
ステップ5: マージ前の状態を確認する
git log --oneline -5
git branch -v
🔍 チェックポイント: マージコミットが存在しないことを確認
NG行動(やってはいけないこと)
git reset --hardをいきなり実行する - 作業中の変更がすべて消える。abort で十分な場合が多い- コンフリクトマーカーを残したままコミットする - ファイルが壊れた状態で保存される
git checkout --theirs .や--ours .を理解せず実行する - 片方の変更がすべて消える- マージ中に別のブランチに checkout する - 状態がさらに複雑になる
よくある質問(FAQ)
Q1: git merge --abort が効かない場合はどうする?
A: マージが完了している(コミット済み)場合は --abort は使えない。その場合は以下を検討する:
# 直前のコミットを取り消す(変更は残る)
git reset --soft HEAD~1
# または完全に戻す(変更も消える)
git reset --hard HEAD~1
⚠️ 警告: --hard は変更が完全に消える。実行前に必ず git log で確認すること。
Q2: abort 後にもう一度同じマージをしたい場合は?
A: 通常通り再度マージコマンドを実行する:
git merge feature-branch
Q3: コンフリクトを解消してからやっぱり中止したい場合は?
A: git add していなければ git merge --abort で戻れる。git add 済みでも git merge --abort は有効。ただしコミット済みなら git reset が必要。
関連するトラブル
準備中
解決しない場合
- Git 公式ドキュメント - git-merge
- 確認すべきファイル:
.git/MERGE_HEAD(存在すればマージ中) - 次に調べるキーワード:
git reset,git revert,git reflog