私は新しいブランチで新しい機能を開発しており、その傍らでマスター ブランチにかなりの数の変更をコミットしました。
新しい機能が完成したときにマージ競合があまり発生しないように、マスター ブランチを新しいブランチにマージして最新の状態に保つことは可能ですか?
答え1
どちらかを選択できますgit merge master
またはgit rebase master
。
ブランチが他の人に配布されていない場合は、この場合、私はgit リベース。
機能ブランチの変更がマスターブランチの変更の上に行われたかのようになり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
in ブランチ後の実際の結果はfeature
次のとおりです。
( A---B---C ) feature@{1}
/
/ A'--B'--C' feature
/ /
D---E---F---G master
コミット A、B、C はリベース後に未解決のままですが、git reflog feature
asを通じてアクセスできますfeature@{1}
。
マージ
誰かがあなたのブランチをプルした場合、またはあなたがそれをどこかにプッシュした場合は、混乱や余分な作業を避けるために、代わりにそれにマージする必要があります。アップストリームリベースからの回復。
git merge master
これはブランチの結果です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