はじめに
git mergeを取り消すメモ。 ほとんど手順メモ程度な感じ+他記事で使うスニペット記事。
とはいえ、数あるgit便利コマンドの中で毎回使うものではないけど
いざって時に役立つ、もしくは、困るのは取り消し系のコマンドですよね。
補足
他の取り消しもぱっと見たい自分用にまとめたので参考までに。
アジェンダ
git reset
でmergeを取り消すコマンド例git reset
でmergeを取り消す一連をやってみる
1. git reset
でmergeを取り消すコマンド例
git reset
でgit 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など)が良い場合もると思うのでそのあたりはチーム内で確認しましょう!