概要
mergeコミットのrevertをしようと思ったのですが、一筋縄ではいかなかったので経緯と調べた事を記します。
まず、こんな感じのコミット履歴でした。
(画面はSourceTreeです。)
・developから派生したfirst, secondブランチ
・first, second共にdevelopにマージ
・secondのマージを取り消すコミットがしたい。
って感じですね。
とりあえずmergeコミットをrevertしてみる
$ git revert 22297c3
怒られました。
error: Commit 22297c36739631c201f7ef542181f75c8a7b4d64 is a merge but no -m option was given. fatal: revert failed
-mオプションを付けろや、との事ですので付けてみました。
git revert -m 1 22297c3
すると、コミットメッセージ編集画面になり無事revertが出来ました。
めでたしめでたし。
いやいやいやいや、なんなんでしょう、このオプション。
本家はこんな事を書いてます。
-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.・・・
解説しますね。
mergeは親コミットを2つ持っている
コミットは必ず親コミットを持ちます。
(最初のcommitは例外です。)
そして、マージコミットは二つの親コミットを持ちます。
・マージされるブランチ(develop)のマージ前コミット(c5a729a)
・マージするブランチ(second)の先頭コミット(95af56c)
です。
revertもコミットになりますので、そのコミットの親をどちらにするんだい?と言うのを指定するのが-mオプションになります。
と言う事で、”-m 1″はdevelopのマージ前コミットを親にしますよと言う指定だったのですね。
なんでこんな指定が必要なのか?
本家とかを読んで察するにこういう事だと僕は理解しています。
(間違ってたら@daiki1003まで教えて下さい。)
マージコミットをrevertする = コミットを無くす
と言う事なので、こうなります。
git「developにrevertコミットをしようと思うんだけど、
22297c3と95af56cとどっちに付ければ良いんだい??」
と言う疑問を解消するため、と言う感じではないでしょうか。
誰かのお役に立てば。Twitterフォローお願いします
「次回以降も記事を読んでみたい!」「この辺分からなかったから質問したい!」
そんな時は、是非Twitter (@daiki1003)やInstagram (@ashdik_flutter)のフォローお願いします♪
Twitterコミュニティ参加お願いします
Twitterコミュニティ「Flutter lovers」を開設しました!参加お待ちしております😁
☕️ Buy me a coffee
また、記事がとても役に立ったと思う人はコーヒーを奢っていただけると非常に嬉しいです!
コメント