![見出し画像](https://assets.st-note.com/production/uploads/images/85967604/rectangle_large_type_2_7f9850c151024bbd4eac5b2c4f9cadff.jpeg?width=1200)
GitHub_Revertでマージする前の状態に戻す_Revert後に再度マージする #255日目
Gitでバージョン管理している中で、一度マージした内容を取り消したいケースが出てくると思います。そんな時に使える機能が「revert」です。
pull requestを出してブランチをマージした後でも、revertを使うことでマージ前の状態に戻すことができます。
![](https://assets.st-note.com/img/1662038024927-NGOOMceFv5.png?width=1200)
一見すると、マージを取り消してマージ前の状態に戻っているように見えます。しかし実体は少し違っていて、「履歴に残っているマージ前の状態のブランチを、マージ後のブランチに再度マージする」という処理になっています。
そのため上記の「Revert」を押下すると、「revert-プルリク番号-元のブランチ名」という名前の、Revert用のブランチが作成されていることが分かります。
![](https://assets.st-note.com/img/1662038268678-ZxZHipFED9.png?width=1200)
後は通常通りMerge pull requestすればOKです。
![](https://assets.st-note.com/img/1662038404770-2E5h1fwx8q.png?width=1200)
次はこのRevart自体を取り消して、このブランチを再度Mergeしてみたいと思います。
ところが、一度MergeしてからRevertした「cd_new」ブランチでプルリクを作成しようとすると、変更がありませんと表示されます。
![](https://assets.st-note.com/img/1662038568629-7MYGQqYmvp.png?width=1200)
これは、cd_newブランチ自体は一度マージされてしまっているので、元々の変更点は一度取り込まれた形になっており、変更として認識されないためです。
ではどうすればよいか?
先ほどのRevertをRevertします。
プルリクの履歴からRevertのプルリクにアクセスします。
![](https://assets.st-note.com/img/1662038850464-fzPvPS6HMJ.png?width=1200)
RevertしたプルリクをRevertします。
![](https://assets.st-note.com/img/1662038909265-NB5Q1vqs0K.png?width=1200)
RevertのRevertのためのプルリクが作成されます。わけわかんなくなってきますね。
![](https://assets.st-note.com/img/1662039003119-0lVhMlqDSl.png?width=1200)
あとはこのプルリクをマージするだけです。
今回は非常にシンプルな例なので何もコンフリクトは起きていませんが、revertは色んな所でコンフリクトを起こしやすいので、本来はあまりやらない、やるとしても慎重に取り扱うべきものです。
ここまでお読みいただきありがとうございました!!