web-dev-qa-db-ja.com

GITマージマスターをブランチに

私は新しいブランチで新しい機能を開発しており、私のブランチではかなりの数の変更をコミットしています。

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

59
mnml

git merge master または git rebase master のいずれかを使用できます。この場合、私は git rebase を使用します。

git rebaseは、機能ブランチの変更がマスターブランチの変更に加えられたかのように作成するため、バージョングラフが単純になります。

リベース

git rebase manual から例をとると、featuregit rebase master

      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。

ブランチfeaturegit rebase masterの後の実際の結果は次のとおりです。

      ( A---B---C )
       /
      /       A'--B'--C' feature
     /       /
D---E---F---G master

コミットA、B、Cはリベース後にぶら下がっていますが、git reflog featureを介して到達可能です。

マージ

誰かがブランチをプルした場合、またはブランチをどこかにプッシュした場合は、代わりにブランチをマージして、反対側での混乱と余分な作業を回避する必要があります。 上流のリベースからの回復 を参照してください。

これはブランチfeaturegit merge masterの結果です:

      A---B---C feature                    A---B---C---M feature
     /                   --merge-->       /       ,---’
D---E---F---G master                 D---E---F---G master

または、ブランチmastergit merge featureを置くと、次のようになります。

      A---B---C feature                    A---B---C feature
     /                   --merge-->       /         \
D---E---F---G master                 D---E---F---G---M master