LoginSignup
1
2

More than 3 years have passed since last update.

git merge --no-ffするとcommitする。

Last updated at Posted at 2020-10-24

当たり前のこと

git merge --no-ffはmerge commitを明示的に行うコマンドなので、
commit画面が出てくるのは当たり前のこと。
それで良い。この動作が正常。
要はmerge.ff=falseしてると起こる。

記事のターゲット

・gitについてよくわからないけど、とりあえず使っていけばなんとかなるかな、と考えている人。
・先輩がなんとなくやっているから、そういう設定にした、なんかワンラインで書く時にcommit画面出てきてめんどくさいな、と思っている人。

環境

$ git config -l
alias.ci=commit
alias.st=status
alias.br=branch
alias.co=checkout
merge.ff=false
pull.ff=only

(不要の部分は削除した。)

git mergeには大きく2種類ある。

コンフリクトや3ウェイマージ周りの話はしません。
要は、多くの場合、mergeをする場合、事足りるのでデフォルトがFAST-FORWARDの設定になっている。
が、多くの諸先輩方は、git merge --abortなどでcommit後に前バージョンに戻りたい事柄が多かったか、それでトラブったケースがあるので経験談からとりあえず--no-ffしとけという話。
(やってみればわかると思うけど)

FAST-FORWARD MERGE

直訳:早送りマージ

詳細は上記本家リンクに任せるとして、重要なのは下記かなと。

・特別な設定がない場合、git merge -にて選択される手法はこっち。
・マージされたブランチにマッチするようにブランチポインタを更新するだけで、マージコミットは作成しません。
・できない場合 (マージされた履歴が現在の履歴の子孫ではない場合)、マージコミットを作成します。
・この動作は、--no-ffオプションで抑制でき、すべての場合にマージコミットを作成します。

TRUE MERGE

直訳:真のマージ

詳細は上記本家リンク
・マージされるブランチは、両方を親として持つマージコミットによって結合される。
・マージされるすべてのブランチからの変更を調整するマージされたバージョンがコミットHEADされる。
・複雑な競合が発生したマージを試みて、最初からやり直したい場合は、git merge --abortで回復できる。(らしい)

回避方法

何もむずかしくない、git merge - -m 'message'するだけ。

ワンラインサンプル

$ git co - && git merge - -m 'merge branch into main' && push origin HEAD

コメント

先達は偉大だ。
基本的には特にこだわりはなくオススメ設定を受け入れさせてもらっている。
それでもなんでだろ?と思ったことはちゃんと調べていきたいと思います。

References

Git公式ドキュメント
gitのmerge --no-ff のススメ

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2