この記事をシェアする

git mergeとgit pullのデフォルト挙動を設定できるようになってるGit

Gitもいろいろ増えているんだと改めた@HIROCASTERでございませう。

過去のGitのバージョンでは、設定できないと言われていたことについて、最近のGitでは設定できるようになっています。(と、言っても何ヶ月も前に追加されている内容ですが…)

そのなかでも「これが欲しかったんだ!」と思われる2点について取り上げます。

スポンサーリンク

git merge –no-ff

git mergeをおこなう際には –no-ff をつけることによって、トピックブランチでおこなわれたコミットが明確にわかるようにするかと思います。

以下の図だと、Topic-bは別ブランチでコミットされましたが、masterへマージする際に ff だったために履歴を見ると別ブランチでコミットされたかどうかが判断できません。

Merge no ff

一方、Topic-CはTopic-B同様に別ブランチでコミットされましたが、masterへmergeされる際に –no-ff を付けることによって、履歴上で別ブランチでおこなわれたコミットが明確にわかるようになっています。

よって、基本的にはmergeには –no-ff をつけることが多い人がいるかと思います。ですが、過去のGitはデフォルトで –no-ff を設定することができませんでした。

ですが、1.7.6以降は以下のように設定すればデフォルトの挙動を –no-ff にすることができます。

マージの際に –no-ff をデフォルトにする設定

.gitconfig に以下を追加

[merge]
    ff = false

Git 1.7.6 のリリースノート

* “git merge” uses “merge.ff” configuration variable to decide to always

create a merge commit (i.e. –no-ff, aka merge.ff=no), refuse to create

a merge commit (i.e. –ff-only, aka merge.ff=only). Setting merge.ff=yes

(or not setting it at all) restores the default behaviour of allowing

fast-forward to happen when possible.

git pull –rebase

リモートリポジトリを中央リポジトリとして複数人と共有している場合、リモートの歴史をrebaseでgit pullする場合が多いかと思います。

これも過去のGitではデフォルトでgit pullの動作をrebaseに設定することができませんでした。

ですが、1.7.9から以下のように設定すれば、git pullの動作はデフォルトでrebaseにすることができるようになりました。

pullの動作をデフォルトでrebaseにする設定

.gitconfig に以下を追加

[pull]
    rebase = true

Git 1.7.9 のリリースノート

* “git pull” learned to notice ‘pull.rebase’ configuration variable,

which serves as a global fallback for setting ‘branch..rebase’

configuration variable per branch.

過去にGitでデフォルトの挙動を設定できないと言われていた、2つの点について取り上げました。Gitのバージョンが上がっても、この辺を改めてチェックしている人は少ないと思うので、改めて.gitconfigで設定できるよう内容を見直してみてはいかがでしょうか。

margeやrebaseは、考え方がいくつかありますので、そもそも、どうおこなうべきか、事前にチームで定めることをオススメします。

考える上で、以下の資料はとても参考になります。

入門Git

入門Git

濱野 純(Junio C Hamano)

スポンサーリンク

この記事をシェアする

著者をフォローする