回答:
あなたはどちらgit merge master
かgit rebase master
、またはこの場合、git rebaseを好むでしょう。
なぜならgit rebase
、機能ブランチの変更がマスターブランチの変更の上に行われたかのようになり、バージョングラフが簡単になります。
例に取るとGitのリベースマニュアル、git rebase master
ブランチにfeature
:
A---B---C feature A'--B'--C' feature
/ --rebase--> /
D---E---F---G master D---E---F---G master
ただし、git rebase
ブランチが配布されていない場合、または古いコミットA、B、Cが新しいコミットA '、B'、C '、およびFで置き換えられるため、ダウンストリームで混乱と余分な作業が発生する場合にのみ適しています以前はなかったG。
git rebase master
分岐後の実際の結果feature
は次のとおりです。
( A---B---C )
/
/ A'--B'--C' feature
/ /
D---E---F---G master
コミットA、B、Cはリベース後にぶら下がりますが、を通じて到達可能git reflog feature
です。
誰かがあなたのブランチを引っ張った場合、またはあなたがどこかにそれをプッシュした場合、混乱ともう一方の端での余分な作業を避けるために、代わりにブランチにマージする必要があります。アップストリームリベースからの回復を参照してください。
これはgit merge master
in branch の結果ですfeature
:
A---B---C feature A---B---C---M feature
/ --merge--> / ,---’
D---E---F---G master D---E---F---G master
または、git merge feature
ブランチmaster
にいる場合、次のようになります。
A---B---C feature A---B---C feature
/ --merge--> / \
D---E---F---G master D---E---F---G---M master
git rebase master
すると、機能ブランチの変更が「リベース」され、マスターブランチの変更に「基づいて」行われます。masterブランチの変更がfeatureブランチの変更と競合する場合、gitはそれらを解決して続行するか、スキップするか、中止するかを尋ねます。確信が持てない場合は、テストブランチをチェックアウトして試してみてgit checkout -b test-feature feature
ください(機能ブランチの名前が「feature」であると仮定)。
git rebase
ブランチが配布されていない場合にのみ使用する必要がありますが、新しいブランチであると言ったので、それは残念です。リンク先のドキュメントのアップストリームリベースからの回復を参照してください。git merge
代わりに使用する必要があります。またgit reflog
、以前の機能ブランチヘッドを見つけるために使用できます。