Help us understand the problem. What is going on with this article?

gitのmerge --no-ff のススメ

More than 1 year has passed since last update.

2015年も終わりになって、gitの基本的な使い方の話に更なる需要があるとは思っていないのですが

本日が私のAdventCalender担当日であることと、本日偶然遭遇したトラブルの都合上、もしかしたらまだ需要が微レ存かもしれないと思い記事を書いていきたいと思います。

まとめ

git config --global --add merge.ff false
git config --global --add pull.ff only

皆しとくといい。

git のデフォルト設定はどうなっているか

gitはデフォルトではmergeコマンドを使った際に、mergeコミットを発生させる必要がない場合mergeコミットを発生せずにmergeを行うfast-forwardでのmergeを行うようになっている。
--no-ffというオプションを付けることで意図的にfast-forwardを行わないコミットをすることが出来る。

どういうトラブルが起こるか

仮にmasterにtopicAブランチをmergeしたとする。

  • fast-forwardであるmergeの場合mergeのコミットが発行されないため、masterがその後更新されていった場合にtopicAブランチで行われた作業を参照するのが面倒になる。
  • mergeの取り消しを行いたいと思った場合かなり面倒。

mergeコミットが存在すると?

  • mergeコミットのdiffを見るだけでそのブランチで行われた作業を見るのが容易
  • mergeコミットを取り消すことでmerge作業自体をなかったことにしたい場合も簡単

というわけで

--no-ffでmergeしよう

作業ブランチの用なブランチ特定の意味を持たない場合は、fast-forwardのmergeでも全く問題ないと思っています。

設定に入れて自動化しよう

毎回 --no-ff と付けてmergeするのは面倒だし忘れることもあります。

git config --global --add merge.ff false

を実行することで、デフォルトの設定を書き換え、指定無しでmergeを行った場合に--no-ffのmergeを行うことが出来るようになります。

また、--ffを付けることで意図的にfast forwardなコミットを行うことも可能です。

mergeだけ自動化した時に起こる問題

  • pullを行った時に行われるmergeにも--no-ffが有効になるため、pullを行う度にmergeコミットが発行されてコミットログが荒れる
  • Macのbrewの用なgitで管理されているシステムを利用した場合に、mergeコミットを発生させてしまう。

pull の時は除外しよう

pull の時は--no-ffオプションを使わないようにしましょう

git config --global --add pull.ff only

と実行することで pullの時はfast forwardが可能な時はfast forwardでmergeを行ってくれるようになります。

再度まとめ

git config --global --add merge.ff false
git config --global --add pull.ff only

皆しとくといい。

diverse
結婚支援事業を中心に、友達・恋人探しのマッチング事業を展開。深刻化する恋愛離れ、未婚率の上昇を解決すべくWEB・アプリサービスを展開。すべての人へ出会いのプラットフォームを提供しています。
http://diverse-inc.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした