その他
Git
【Git】マージコミットを修正する方法【git rebase -i -r】
08/03/2020
先にまとめ
マージコミットのメッセージを修正したい場合
git rebase -i --rebase-merges head~
- 対象のマージコミットの
merge -C ハッシュ値 ラベル名
の-C
を-c
(小文字)に変更する - コミットメッセージ編集状態(
git commit --amend
などと同じ状態)になるので、コミットメッセージを修正する
マージ元ブランチのコミットを修正する
git rebase -i --rebase-merges head~
git rebase -i head~
と同じように作業する- コミットメッセージ左側に
pick
と表示されるので、これを適宜edit
やsquash
などに変更 - コミットメッセージを編集したり、コミットの内容を変更したり、コミットをまとめたりする(参考:【git rebase -i】git の commit をまとめる)
- コミットメッセージ左側に
どんな状況で使う?
※管理上よろしいかどうかは置いておいて……
では、以下2つの作業について手順を紹介します。
- マージコミットのメッセージを修正
- マージ元ブランチのコミットをまとめる
1. マージコミットのメッセージを修正
修正したいマージコミットを含むブランチにいる状態(上図の状態だと、master
ブランチが対象)で、以下のコマンドを実行します。
git rebase -i --rebase-merges head~3
# または git rebase -i -r head~3
# head~○ の数字は、さかのぼるコミットログの数
すると、以下のようなコミット編集画面になります。
label onto
# Branch develop
reset efef77a # Update: リクルート内容 ~ 女性声優
pick a573a1d Update: `recruit` page and add `RecruitWrapper`
pick befbc9d Update: `recruit` page structure
pick d0ff9e8 Update: recruit top page to use vuex store data
pick 84e2b4a Add: recruit slug page
pick 256c175 Update: set `RecruitWrapper` min-height
pick 21dcf12 Update: リクルート個別ページの head 反映
# ★1. このあとのマージコミットのメッセージを修正したい場合
label develop # ★2. ここのラベルに基づいて……
# Branch develop-2
# (略)
label develop-2
# Branch develop-3
# (略)
label develop-3
reset onto
merge -c 60de973 develop # ★3. 「★2」のラベルと一致する行を見つけ、"-C" を "-c"(小文字)に変更する
merge -C e052557 develop-2
merge -C 42a68aa develop-3
上記のとおり、対象のコミットの -C
を -c
に変えたら、コミット編集画面を閉じます。
すると再びコミット編集画面が立ち上がるので、今度はコミットメッセージの編集を行います。
# Merge branch 'develop' ← 元のメッセージを消して……
修正後のメッセージを記載する
そしてコミット編集画面を閉じると、処理が走って、問題なければ完了となります。
2. マージ元ブランチのコミットをまとめる
修正したいマージコミットを含むブランチにいる状態で、以下のコマンドを実行します。
git rebase -i --rebase-merges head~3
# または git rebase -i -r head~3
# head~○ の数字は、さかのぼるコミットログの数
以降は基本的に git rebase -i
の手順と一緒です。
(参考:【git rebase -i】git の commit をまとめる)
label onto
# Branch develop
reset efef77a # Update: リクルート内容 ~ 女性声優
pick a573a1d Update: `recruit` page and add `RecruitWrapper`
pick befbc9d Update: `recruit` page structure
pick d0ff9e8 Update: recruit top page to use vuex store data
pick 84e2b4a Add: recruit slug page
squash 256c175 Update: set `RecruitWrapper` min-height # ★ 合成したいコミットを `squash` に設定
pick 21dcf12 Update: リクルート個別ページの head 反映
label develop
# 他の場所は変更しないで、編集画面を閉じる
コンフリクトが起こって元に戻したい時
git rebase --abort
すれば、とりあえず rebase 前の状態に戻ります。