GitHubで過去のマージをRevertしたときの挙動

1. はじめに

GitHubで誤ってマージしたPull Requestを取り消す場合、Revert機能を使うのが安全です。

Revertは「過去のマージを削除する」のではなく、打ち消す新しいコミットを追加する操作です。


2. Revertの仕組み

  • Revertは「指定したマージコミットの変更を逆に適用する」仕組みです。
  • その結果、mainのコードは「マージがなかった状態」に戻ります。
  • しかし、履歴としては「マージした事実」も「Revertした事実」も残ります。

3. 履歴の変化(例)

Revert前

main ── A ── B ── M(誤マージ) ── C ── D

Revert後

main ── A ── B ── M(誤マージ) ── C ── D ── R(Revert)
  • M … 誤ってマージしたPR
  • R … Mを打ち消すRevertコミット

👉 コード上はMの変更が打ち消され、Mが存在しなかったのと同じ状態になる


4. コードと履歴の関係

  • コード内容
    • Revert後のmainは、誤マージがなかった状態に戻る
  • 履歴
    • M(誤マージ)は残る
    • R(取り消し)が追加される
    • 履歴としては「マージしてしまったが、後から取り消した」ことが明示される

5. チーム開発でのポイント

  • 安全性
    • 履歴を書き換えないため、チーム開発でも安全に利用できる
  • pullが必要
    • Revertコミットを追加した後、各メンバーは必ず最新のmainをpullする必要がある
  • 競合の可能性
    • M以降のコミット(CやD)がMと同じファイルを触っている場合、Revert時に競合が発生する可能性がある

6. 図解

mainの流れ

Before:   ── A ── B ── M ── C ── D
After:    ── A ── B ── M ── C ── D ── R
  • Mの変更はRによって打ち消される
  • mainの状態はMがなかったのと同じ

7. まとめ

  • Revertは削除ではなく「取り消しコミットの追加」
  • コードは誤マージ前の状態に戻る
  • 履歴には「マージした事実」も「取り消した事実」も残る
  • チーム開発では安全に使える方法であり、誤マージ対応の標準的な手法

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