Gitマージを使用すると、早送りを実行でき、早送りのブランチマージは実行できません。早送りマージを使用する場合と早送りマージを使用しない場合のアイデアはありますか?
Gitマージを使用すると、早送りを実行でき、早送りのブランチマージは実行できません。早送りマージを使用する場合と早送りマージを使用しない場合のアイデアはありますか?
回答:
この--no-ff
オプションは、機能ブランチの概念を明確にしたい場合に役立ちます。そのため、その間にコミットが行われなかった場合でも、FFは可能です。メインラインの各コミットを1つの機能に対応させたい場合があります。したがって、一連のコミットを含む機能ブランチを単一のユニットとして扱い、それらを単一のユニットとしてマージします。を使用してブランチをマージする機能を実行すると、履歴から明らかです--no-ff
。
あなたがそのようなことを気にしないなら-あなたはおそらくそれが可能なときはいつでもFFで逃げることができるでしょう。したがって、ワークフローのsvnのような感覚が得られます。
たとえば、この記事の作成者は、--no-ff
オプションはデフォルトである必要があると考えており、彼の推論は上記で概説したものに近いものです。
「feature」ブランチでの一連のマイナーコミットが集合的に1つの新しい機能を構成する状況を考えてみ--no-ff
ます。機能を実装しました。すべてのログメッセージを手動で読み取る必要があります。機能全体(つまり、コミットのグループ)を元に戻すことは、(--no-ff
使用しない場合)本当に頭痛の種ですが、--no-ff
フラグを使用した場合は簡単に実行できます[理由たった1つのコミットです。」
--no-ff
ような基本的なツールを使用する場合、コミット履歴に対するメリットがすぐに明らかにならない可能性があることに注意git log
してください。とは言え、たとえばやgit log --first-parent
などの統合ブランチで使用すると、メリットがより明確になります。あなたは宗教的に使用している場合だろうこと、その後、排他的ながら、マージ要求を表示し、まだ(それ以上)の包括的な履歴を提供します。そのため、VincentはGitFlowでの使用を推奨しています。develop
master
--no-ff
git log
プロジェクトでよく見られる例を挙げます。
ここで、オプション--no-ff
(つまり、true merge)は、複数の親を持つ新しいコミットを作成し、より良い履歴追跡を提供します。それ以外の場合--ff
(つまり、早送りマージ)がデフォルトです。
$ git checkout master
$ git checkout -b newFeature
$ ...
$ git commit -m 'work from day 1'
$ ...
$ git commit -m 'work from day 2'
$ ...
$ git commit -m 'finish the feature'
$ git checkout master
$ git merge --no-ff newFeature -m 'add new feature'
$ git log
// something like below
commit 'add new feature' // => commit created at merge with proper message
commit 'finish the feature'
commit 'work from day 2'
commit 'work from day 1'
$ gitk // => see details with graph
$ git checkout -b anotherFeature // => create a new branch (*)
$ ...
$ git commit -m 'work from day 3'
$ ...
$ git commit -m 'work from day 4'
$ ...
$ git commit -m 'finish another feature'
$ git checkout master
$ git merge anotherFeature // --ff is by default, message will be ignored
$ git log
// something like below
commit 'work from day 4'
commit 'work from day 3'
commit 'add new feature'
commit 'finish the feature'
commit ...
$ gitk // => see details with graph
(*)ここで、newFeature
ブランチが再利用される場合、新しいブランチを作成する代わりに、gitは--no-ff
とにかくマージを行う必要があることに注意してください。つまり、早送りマージは常に適格とは限りません。