カテゴリー
コンピューター

【Git】–no-ff オプションを付け忘れたマージをやり直す方法

git merge --no-ff <branchname> とするところを間違えて git merge <branchname> と –no-ff オプションをつけ忘れて実行してしまいました><。

今回は、git の過去を改変して –no-ff オプションをつけたマージをやりなおす方法をノートいたします。ローカル環境です。

解決のポイント

  • git reflog でマージ前に戻る。
  • git reset --hard HEADgit reset --hard ORIG_HEAD では解決できなかった。
  • git reset --hard MERGE_HEAD だったら上手く解決できたのかもしれない(未検証)。

補足

  • HEAD: 最新のコミットに対するハッシュ値の別名
  • ORIG_HEAD: 最新の一つ手前のコミットに対するハッシュ値の別名
  • MERGE_HEAD: マージされたブランチの最新のコミットに対するハッシュ値の別名

実際にやり直した記録

$ # ↓間違えて --no-ff を付けないでマージしてしまった。
$ #   結果、マージコミットが作られていない。
$ git log --all --decorate --graph --oneline
* 066b5a6 (HEAD -> master, feature2) feature2を追加する
*   c273a85 Merge branch 'feature1' feature1を追加する
... 略 ...

$ # ↓reset 2種を試すも、効果なし
$ git reset --hard HEAD
HEAD is now at 066b5a6 feature2を追加する

$ git reset --hard ORIG_HEAD
HEAD is now at 066b5a6 feature2を追加する

$ # ↓reflog で戻りたい過去を確認。マージ前の HEAD@{1} 時点に戻りたい。
$ git reflog
066b5a6 HEAD@{0}: merge feature2: Fast-forward
c273a85 HEAD@{1}: checkout: moving from feature2 to master
066b5a6 HEAD@{2}: commit: feature2を追加する
... 略 ...

$ # ↓戻りたい過去へ reset
$ git reset --hard HEAD@{1}
HEAD is now at c273a85 Merge branch 'feature1' feature1を追加する

$ # ↓無事マージ前の過去へ戻ったことを確認
$ git log --all --decorate --graph --oneline
* 066b5a6 (feature2) feature2を追加する
*   c273a85 (HEAD -> master) Merge branch 'feature1' feature1を追加する
... 略 ...

$ # ↓本来行いたかった操作を行い、その結果を確認
$ git merge --no-ff feature2
Merge made by the 'recursive' strategy.
... 略 ...

$ git log --all --decorate --graph --oneline
*   e8195f4 (HEAD -> master) Merge branch 'feature2' feature2を追加する
|\
| * 066b5a6 (feature2) feature2を追加する
|/
*   c273a85 Merge branch 'feature1' feature1を追加する
... 略 ...

おわりに

参考ページです。ありがとう存じます!

Git は気軽に歴史を改変したり、整理したりということができることは知っておりました。過去を変えることはあまり行わないように思う一方で、大事なことと存じます。ですのでしっかりとノートいたしました。

以上です。

コメントを残す