すでにリモートにプッシュされたマージコミットを元に戻すにはどうすればいいですか? 質問する

すでにリモートにプッシュされたマージコミットを元に戻すにはどうすればいいですか? 質問する

git revert <commit_hash>だけでは動作しません。どうやら、-m指定する必要があるようです。

ベストアンサー1

ではgit revert -m、オプションは親番号-mを指定します。マージコミットには複数の親があり、どの親がメインラインで、どの親がマージ解除するブランチであるかを Git が自動的に認識しないため、このオプションが必要になります。

の出力でマージコミットを表示するとgit log、 で始まる行にその親がリストされていることがわかりますMerge

commit 8f937c683929b08379097828c8a04350b9b8e183
Merge: 8989ee0 7c6b236
Author: Ben James <[email protected]>
Date:   Wed Aug 17 22:49:41 2011 +0100

Merge branch 'gh-pages'

Conflicts:
    README

この状況では、git revert 8f937c6 -m 1は にあったツリーを取得し8989ee0git revert -m 2は にあったツリーを復元します7c6b236

何を元に戻すのかをよりよく理解するにはgit diff <parent_commit> <commit_to_revert>、次の操作を実行します。

git diff 8989ee0 8f937c6

そして

git diff 7c6b236 8f937c6

しかし、そうする際には

「...は、マージによってもたらされるツリーの変更を決して望まないことを宣言します。その結果、後のマージでは、以前に元に戻されたマージの祖先ではないコミットによってもたらされたツリーの変更のみがもたらされます。これは、あなたが望むことかもしれませんし、そうでないかもしれません。誤ったマージを元に戻す方法詳細については。" (git-merge マニュアルページ)。

おすすめ記事