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回
ディスカッション
コメント一覧
まだ、コメントがありません