tweeeetyのぶろぐ的めも

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

【git】git mergeを取り消す

はじめに

git mergeを取り消すメモ。 ほとんど手順メモ程度な感じ+他記事で使うスニペット記事。

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

補足

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

アジェンダ

  1. git resetでmergeを取り消すコマンド例
  2. git resetでmergeを取り消す一連をやってみる

1. git resetでmergeを取り消すコマンド例

git resetgit mergeを取り消します。

git resetはaddやcommitも取り消せるのでそれはこっちを参考に。
【git】git addを取り消す
【git】git commitを取り消す

コマンド例

直前のコミットがgit mergeしたことによるものだとしてこんな感じ。

※ ログ確認
$ git log --oneline --graph --decorate
* f088a54 (HEAD, some-branch, master) add file
* 8189e9c (origin/master, origin/HEAD) Initial commit

※ merge取り消し
$ git reset --hard HEAD^
HEAD is now at 8189e9c Initial commit

また、HEAD^じゃなくてコミットハッシュ指定でもいけます。

$ git reset --hard 8189e9c

2. git resetでmergeを取り消す一連をやってみる

今の状態を確認
※ some-branchを切っている
$ git branch
  master
* some-branch

※ 変更はすべてcommit済み
$ git status
On branch some-branch
nothing to commit, working directory clean

※ ログ的には初期状態からファイルを追加しただけ
$ git log --oneline
f088a54 add file
8189e9c Initial commit

※ ファイルの状態はこんなん
$ ls -l
-rw-r--r--  1 hoge  hoge   18  6  7 05:18 README.md
drwxr-xr-x  3 hoge  hoge  102  6 13 18:16 img
-rw-r--r--  1 hoge  hoge   83  6 13 18:16 index.html
masterにsome-branchをmergeする

masterブランチにsome-branchの内容を取り込みたいのでmergeします

※ masterに切り替え
$ git checkout master

※ masterは初期状態のまま
$ git log --oneline
8189e9c Initial commit

※ 変更したものはない
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

※ 初期のままなのでREADME.mdのみ
$ ls -l
-rw-r--r--   1 hoge  hoge   18  6  7 05:18 README.md

※ some-branchをmergeして取り込み
$ git merge some-branch
Updating 8189e9c..f088a54
Fast-forward
 img/sample.png | 0
 index.html     | 8 ++++++++
 2 files changed, 8 insertions(+)
 create mode 100644 img/sample.png
 create mode 100644 index.html

※ some-branchの内容が取り込まれた
$ ls -l
-rw-r--r--   1 hoge  hoge   18  6  7 05:18 README.md
drwxr-xr-x   3 hoge  hoge  102  6 13 18:22 img
-rw-r--r--   1 hoge  hoge   83  6 13 18:22 index.html
mergeを取り消す
※ ログを確認
※ some-branchをmergeしたコミットログのf088a54が確認できる
$ git log --oneline --graph --decorate
* f088a54 (HEAD, some-branch, master) add file
* 8189e9c (origin/master, origin/HEAD) Initial commit

※ mergeしたコミットを取り消し
$ git reset --hard HEAD^
HEAD is now at 8189e9c Initial commit

※ 取り消されて最初のcommitのみにもどっている
$ git log --oneline
8189e9c Initial commit

※ ファイルなども当然初期の状態にもどる
$ ls -l 
-rw-r--r--  1 hoge  hoge  18  6  7 05:18 README.md

まとめ

mergeの取り消しといってもaddやcommitのときとそんなに変わりありませんね。
運用上は他の方法(revertなど)が良い場合もると思うのでそのあたりはチーム内で確認しましょう!