トラブルシューティング

main ブランチに直接コミットしてしまったときの対処法

main に直接コミットした変更を git revert で安全に取り消す手順

main ブランチに直接コミットしてしまったときの対処法 diagram

状況の確認

ブランチを切り忘れて main に直接コミットしてしまうことは珍しくありません。

まず git log --oneline -5 で余分なコミットが何件あるかを確認してから、次のステップに進みましょう。

push 済みかどうかで対処法が変わります。

push 済みの場合は git revert が安全です。

未 push なら git reset も使えますが、revert なら状況を問わず安全に対処できます。

bash
# main の状態を確認
git log --oneline -5

git revert で変更を打ち消す(推奨)

git revert は指定したコミットの変更を打ち消す新しいコミットを作成します。

履歴を書き換えないため、push 済みでもチームに影響を与えずに安全に取り消せます。

複数コミットを取り消す場合は HEAD~2..HEAD のように範囲指定します。

--no-commit を付けると、打ち消しをまとめて 1 つのコミットにできます。

bash
# 直前の 1 件を取り消す
git revert HEAD

# 直前の 2 件をまとめて取り消す
git revert --no-commit HEAD~2..HEAD
git commit -m "main への誤コミットを取り消し"

変更を別ブランチで作り直す

revert で main を元に戻したら、改めて feature ブランチを作成し、同じ変更をやり直します。

revert 前のコミット内容は git refloggit log で確認できるので、差分を参考にしながら作業できます。

bash
# feature ブランチを作成して切り替え
git switch -c feature/my-work

# ここで変更を作り直してコミット
# revert コミットの差分を参考にできる
git log --oneline -5

未 push の場合: git reset も使える

まだ push していない場合は git reset で履歴ごと巻き戻す方法もあります。

先に現在位置から feature ブランチを作成し、その後 main を戻します。

--hard を使うとワーキングツリーも戻りますが、変更は feature ブランチに残っているので安全です。

ただし push 済みの場合は force push が必要になり、チームに影響するため非推奨です。

bash
# 1. 現在位置で feature ブランチを作成
git branch feature/my-work

# 2. main を 2 つ前に戻す
git reset --hard HEAD~2

# 3. feature ブランチに切り替えて作業を続行
git switch feature/my-work

関連コマンド