GitHubで誤ってマージしたPull Requestを取り消す方法(Revert運用)

はじめに

GitHubでPull Request(PR)をマージした後に「やっぱり取り消したい!」という場面は少なくありません。

特にチーム開発では、誤って不完全なコードやテスト中の変更を main に入れてしまうことがあります。

今回は、GitHub Web UIの「Revert」機能ローカル操作を使って、誤マージを「なかったことにする」方法を解説します。


なぜ「削除」ではなく「Revert」なのか

  • GitHubには「PR削除」という機能は存在しません。
  • 代わりに「Revert」を使い、マージコミットを打ち消す新しいコミットを作成する方法が推奨されています。
  • この方法なら履歴を書き換えないため、チーム開発でも安全に利用できます。

GitHub Web UIでのRevert手順

  1. 誤ってマージしたPRを開く
  2. 右側にある 「Revert」ボタン をクリック
  3. 自動的に Revert PR(例: Revert #123)が作成される
  4. 差分を確認し、問題なければ「Create pull request」
  5. 最後にそのPRを「Merge pull request」

👉 これで、元のPRの変更を打ち消すコミットが main に追加されます。


図解(フロー)

main ──●───●────●(Merge PR#123)
         ↑
         │
         └── Revertボタン → 新しいPR作成
                          └─●(Revert PR#124 マージ)

チームメンバーの対応

Revert PRをマージしたら、それで終わりではありません。

各メンバーの作業手順

  1. main ブランチにRevertコミットが追加される
  2. 各メンバーは必ず 最新のmainをpull する
    • コマンドライン
git checkout main
git pull origin main
  1. (main に切り替えてから)GitHub Desktopで『Fetch origin』→『Pull』

mainに切り替えてから Pull します

  • GitHub Desktop の 「Pull origin」 は、現在選択中のブランチに対して実行されます。
  • つまり、feature ブランチのまま Pull を押しても、更新されるのは feature の追跡先であって、ローカル main は更新されません(Fetch でリモート情報は取ってきますが、ローカル main には反映されない)。

正しい手順(GitHub Desktop)

  1. 右上の Current Branch を main に切り替える
  2. Fetch origin(必要なら)→ Pull origin
    • これでローカル main が最新になります
  3. 各自の作業ブランチに戻り、必要なら Branch → Update from main(または main を merge/rebase)

よくある誤解

  • 「Fetch origin だけで main が最新になる」→ ならない(Fetch は“取得”のみ。ローカル main に“反映”するのは Pull)
  • 「feature のまま Pull すれば main も更新される」→ 更新されない(現在のブランチだけ)

図解

main: 誤マージ → Revert PR → 修正済み
          │
          ▼
  各メンバー: pullして同期

👉 pullしないと、古い状態のmainで作業を続けてしまい競合の原因になります。


競合が起こるケース

  • 誤ってマージした変更を、他の人が自分の作業ブランチに取り込んでしまった場合
  • Revertでその変更が打ち消されると、同じファイルを修正している部分で競合することがあります

👉 この場合は、競合解決を手動で行う必要があります。


ローカルでのRevert(補足)

Web UIの「Revert」が使えない場合は、ローカルでコマンドを実行できます。

git log    # マージコミットのハッシュを確認
git revert -m 1 <hash>
git push origin main
  • -m 1 は「親ブランチを指定(通常は1)」という意味です。
  • これにより、マージを打ち消す新しいコミットが作成されます。

運用ルールのおすすめ

  • 学習中や個人開発 → 間違えたら git reset –hard で戻してもOK
  • チーム開発 → 「Revert」機能で履歴を残すのが安全
  • 授業用ルール例
    • 学習中は細かくコミット
    • 提出時はSquashで整理
    • 誤マージはRevertで対応

まとめ

  • GitHubでPRを削除する機能はない → Revertで打ち消す
  • Revert後は 各メンバーがpullして最新状態を取り込む必要がある
  • 競合が出る場合は手動解決
  • チーム開発では 「Revert」運用が最も安全

👉 このブログ記事をスライドと一緒に授業で見せれば、学生さんも 「誤マージしても取り返せる」と安心できます。

訪問数 8 回, 今日の訪問数 8回