tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【git】ブランチ運用でpull requestをmerge pullrequestした後に取り消す

はじめに

pull requestを出した後にmerge pull requestしてしまったものを取り消すメモ。
ほとんど手順メモ程度な感じ+他記事で使うスニペット記事。

とはいえ、数あるgit便利コマンドの中で毎回使うものではないけど
いざって時に役立つ、もしくは、困るのは取り消し系のコマンドですよね。

補足

他の取り消しもぱっと見たい自分用にまとめたので参考までに。

アジェンダ

  1. pull requestのmerge後に取り消すコマンド
  2. やってみる

1. pull requestのmerge後に取り消すコマンド

コマンドとしては簡単です。

$ git revert -m 1 マージコミットハッシュ番号

2. やってみる

コマンドは簡単ですがやっぱりやってみないとイメージはわからないですよね。
ということでやってみます。

初期状態

試す前に今の状態がこんな感じだったとして進めます

※ 初期コミットのみ
$ git log --oneline
8189e9c Initial commit

$ ls -l
drwxr-xr-x  15 hoge  hoge  510  6 10 15:34 .git
-rw-r--r--   1 hoge  hoge   26  6 10 15:30 README.md

$ git branch 
* master
pull request 〜 masterへのmergeまでやる

取り消す前にまずはpull request送るまでやります。

※ ブランチを作成してチェックアウト
$ git checkout -b some-branch

※ ファイルを追加
$ ls -al
-rw-r--r--  1 hoge  hoge   26  6 10 15:30 README.md
drwxr-xr-x  3 hoge  hoge  102  6  9 21:19 img
-rw-r--r--  1 hoge  hoge   83  6  9 21:19 index.html

※ add、commitする
$ git add .
$ git commit -m 'add file'

※ ファイルを修正
$ vi index.html

※ add、commitする
$ git add .
$ git commit -m 'modify index.html'

※ pushする
$ git push origin some-branch

※ logを確認
$ git log --oneline
e1bbeab modify index.html
0efdd5c add file
8189e9c Initial commit

ここまでやったらgithub上のCompare $ pull requestボタンからpull requestを送ります。
f:id:tweeeety:20150610222054p:plain

pull requestしたらすぐにmergeします。
f:id:tweeeety:20150610222104p:plain

取り消す

masterにmergeしたのを取り消しますが、流れとしてはこんな感じで行います。
今回はファイルを追加・修正したものを

  • masterにチェックアウト
  • pullして最新にする
  • logを確認してmerge commitハッシュを確認する
  • git revertで戻す(失敗例)
  • git revertで戻す(成功例)
  • revertしたログを確認してみる
  • revertした後ファイルとか見てみる
  • revertしたコミットをmasterにpushする
※ masterにチェックアウト
$ git checkout master

※ pullして最新にする
$ git pull

※ logを確認してmerge commitハッシュを確認する
$ git log --oneline
43cc42e Merge pull request #2 from tweeeety/some-branch
e1bbeab modify index.html
0efdd5c add file
8189e9c Initial commit

※ git revertで戻す(失敗例)
$ git revert 43cc42e
error: Commit 43cc42e628bfc9e8d1bf4eab3bbb638fed7397ce is a merge but no -m option was given.
fatal: revert failed

※ git revertで戻す(成功例)
$ git revert -m 1 43cc42e

※ revertしたログを確認してみる
$ git log --oneline --graph --decorate
* 8a79277 (HEAD, master) Revert "Merge pull request #2 from tweeeety/some-branch"
*   43cc42e (origin/master, origin/HEAD) Merge pull request #2 from tweeeety/some-branch
|\  
| * e1bbeab (origin/some-branch, some-branch) modify index.html
| * 0efdd5c add file
|/  
* 8189e9c Initial commit

※ revertした後ファイルとか見てみる
$ ls -al 
drwxr-xr-x  16 hoge  hoge  544  6 10 15:02 .git
-rw-r--r--   1 hoge  hoge   18  6  9 21:28 README.md

※ revertしたコミットをmasterにpushする
$ git push origin master
解説

ということで、今回の例でいうと
merge commitハッシュである43cc42eを指定してrevertすることで、
逆の打ち消すコミットを発行しました。

最後にlsでファイルを見た通り8189e9c Initial commitの状態まで戻っています。

まとめ

ブランチ運用で進めていてmergeしてリリースしたが戻したいときは
こういったオペレーションも必要なので使うチャンスは訪れたくはないですが覚えたいですね!