スクリーンショット 2015-02-23 19.08.54

【git】mergeコミットのrevertを試してみた。

LINEで送る
Pocket

タイトルの通りなのですが、mergeコミットのrevertをしようと思ったのですが一筋縄ではいかなかったので経緯と調べた事を記します。


まず、こんな感じのコミット履歴でした。
(画面はSourceTreeです。)

スクリーンショット 2015-02-23 19.05.30


・developから派生したfirst, secondブランチ
・first, second共にdevelopにマージ
・secondのマージを取り消すコミットがしたい。


って感じですね。

とりあえずいつも通りrevert


怒られました。


-mオプションを付けろや、との事ですので付けてみました。


すると、コミットメッセージ編集画面になり無事revertが出来ました。

スクリーンショット 2015-02-23 19.08.54


めでたしめでたし。




いやいやいやいや、なんなんでしょう、このオプション。

本家はこんな事を書いてます。


-m parent-number
–mainline parent-number
Usually you cannot revert a merge because you do not know which side of the merge should be considered the mainline. This option specifies the parent number (starting from 1) of the mainline and allows revert to reverse the change relative to the specified parent.・・・

解説しますね。

マージは親コミットを2つ持っている


コミットは必ず親コミットを持ちます。
(最初のcommitは例外です。)

スクリーンショット_2015-02-23_19_07_38


そして、マージコミットは二つの親コミットを持ちます。

マージされるブランチ(develop)のマージ前コミット(c5a729a)
マージするブランチ(second)の先頭コミット(95af56c)

です。

revertもコミットになりますので、そのコミットの親をどちらにするんだい?と言うのを指定するのが-mオプションになります。
と言う事で、”-m 1″はdevelopのマージ前コミットを親にしますよと言う指定だったのですね。

なんでこんな指定が必要なのか?


本家とかを読んで察するにこういう事だと僕は理解しています。
(間違ってたら@daiki1003まで教えて下さい。)

スクリーンショット_2015-02-23_19_07_38


マージコミットをrevertする = コミットを無くす
と言う事なので、こうなります。
スクリーンショット_2015-02-23_19_07_38


git「developにrevertコミットをしようと思うんだけど、
22297c395af56cとどっちに付ければ良いんだい??」

と言う疑問を解消するため、と言う感じではないでしょうか。

誰かのお役に立てば。

LINEで送る
Pocket

Dalt

translimit, Inc. Application Engineer. Twitter: @daiki1003 Facebok: Daiki Asahi

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です