リベース

リベース

私は新しいブランチで新しい機能を開発しており、その傍らでマスター ブランチにかなりの数の変更をコミットしました。

新しい機能が完成したときにマージ競合があまり発生しないように、マスター ブランチを新しいブランチにマージして最新の状態に保つことは可能ですか?

答え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 masterin ブランチ後の実際の結果はfeature次のとおりです。

      ( A---B---C ) feature@{1}
       /
      /       A'--B'--C' feature
     /       /
D---E---F---G master

コミット A、B、C はリベース後に未解決のままですが、git reflog featureasを通じてアクセスできます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

関連情報