0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

マージコミットをgit revertしたら、期待の差分が表示されなくなった話

Last updated at Posted at 2025-09-22

事の経緯

個人開発にて

  1. mainからdevelopを切って作業、コミットAを作成
  2. developからmainへマージ
  3. やっぱりmainへのマージを取り消したいな… → revertのプルリクを作成してmainにマージ
  4. 再度developからmainへのプルリクを作成しようとする
  5. 差分が全く表示されず、プルリクを作成できない!!

💬 「mainブランチで、コミットAをなかったの事にしたのだから、コミットA分の差分が表示されるのでは?!?!」と思っていた。

何故差分が表示されないのか

mainの状況

  1. develop( コミットA )がマージされる
  2. マージコミットをrevertしたことで、マージが無かった事になる = コミットA が無かった事になる

developの状況

  1. コミットA

💡したがって、Gitは「コミットAは、mainではすでに打ち消された状態になっているから、新しい差分はない」と判断する

コミットA分の差分を再度出す方法

develop側で、revertのマージコミットをrevertすれば良いらしい。

手順

  1. git checkout develop (developにcheckout)
  2. git fetch origin main (リモートのmainをローカルに)
  3. git merge origin/main (revertされたmainをdevelopにマージ)
  4. git revert revertのマージコミットのハッシュ値 -m 1 (revertのマージコミットをrevert)
  5. git push origin develop (リポジトリにpush)
  6. developからmainへのプルリクを作成でき、コミットAの差分も表示される

以下のログになる

* commit ddddd (develop, origin/develop)
| 
|     Revert "Merge pull request #2 from xxx/revert-1-develop" (※revertのマージコミットの打ち消し)
|     
|     This reverts commit ccccc, reversing
|     changes made to aaaaa.
|   
*   commit ccccc (origin/main, main)
|\  Merge: aaaaa bbbbb 
| | 
| |     Merge pull request #2 from xxx/revert-1-develop (※revertのマージコミット)
| |     
| |     Revert "コミットA作業分"
| | 
| * commit bbbbb
|/    
|       Revert "コミットA作業分" (※revertコミット)
|
* commit aaaaa
| 
|     コミットA

mainの状況

  1. develop( コミットA )がマージされる
  2. マージコミットをrevertしたことで、マージが無かった事になる = コミットA が無かった事になる

developの状況

  1. コミットAを作成
  2. mainを取り込むことで、revertコミットが取り込まれる
  3. リバートのマージコミットをリバートする = コミットAの打ち消しがなかったことになる

💡Gitは「mainの打ち消された状態と、developの打ち消しがない状態と差分がある」と判断する

(補足)git revert -m 1について

マージコミット(今回の場合は cccccのコミットのこと。= revertコミットのマージコミット)には、親コミットが2つある。

今回だとaaaaa(コミットA)bbbbb(revertコミット)

そのため、revertでマージコミットを打ち消すとどちらのコミットに戻すのかを聞かれる。

1にすると、aaaaa(マージされた側のブランチ)
2にすると、bbbbb(マージした側のブランチ)
に戻される。

今回は、developをコミットAの状態に戻したかったので、git revert -m 1とした。

参考
https://blog.toshimaru.net/git-revert-mainline/

感想

(developのコミットログも汚くなるので、個人開発であればシンプルにmainをresetしちゃうのが良い気がする)

めちゃくちゃに参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?