2016-08-16 30 views
0

私はgitにちょっと新しく、何か分かりません。私に説明させてください。ローカルブランチをリモートブランチとマージする

私はリモートで追跡される2つのブランチを持っています。それらの間に共通のコードがあり、このコードを第3のローカル専用ブランチで分離する(つまり、変更を原点にプッシュしない)。その後、このローカルブランチを他の2ブランチとマージしたい。

質問があります - 私が2つのブランチから起点に移動するとき、マスターブランチは私が作成したこの3番目(ローカルのみ)のブランチを認識していますか?そして、これは2つのブランチ間のマージを容易にするでしょうか?

+0

ブランチは相互に「認識」していません。 Gitはコミットの大きなグラフであり、ブランチはそのグラフの特定の要素へのポインタに過ぎないことに注意してください。ブランチをプッシュするとき、実際に何をしているのかは、履歴コミット(対応するグラフ構造を含む)のすべてをプッシュすることです。 –

+0

@OliverCharlesworthリモートトラッキングブランチを除いて、とにかく - そこには「認識」があります。 – Conduit

答えて

2

次の2本の枝のようなもの持っているようなので、それが聞こえる:

 A-B-C br1 
    /
-*-*-M   master 
     \ 
     U-V-W br2 

をそして、あなたは、いくつかの一般的な変更のための新しい枝を抽出したい - のがsharedことと呼ばましょう:その後、

 A-B-C br1 
    /
-*-*-M-----S shared 
     \ 
     U-V-W br2 

そして、そのブランチを他の既存のブランチにマージしますか?私が正しくあなたの説明を理解していると仮定すると、

 A-B-C-D br1 
    / /
-*-*-M-----S shared 
     \  \ 
     U-V-W-X br2 

私は原点に私の2つの支店から押すと、マスター・ブランチは、この第三の意識になるだろう(ローカルのみ)ブランチいます私は作った?

いいえ、masterは、あなたがそれ(commitmergereset、など)に何かをするまでにMをコミットしたままになります。

これは2つのブランチ間のマージを容易にしますか?

おそらくそれは本当にコミットSの性質とあなたの共有、変更を抽出し、そこから他の変化との関係に依存するが、一般的には、このような共有の変更を認識し、それらをマージする前に単独でそれらを完了することをお勧めします共通コードに依存するブランチに戻ります。

+0

Sが "3番目のローカル専用ブランチでこのコードを分離する"の場合、そのコミットはbr1とbr2と一緒にプッシュされます。したがって、ref名 "shared"はそうではありませんが、M..Sからのコミットは。 – DavidN

+0

正しい。一般的に私の好みは、 'shared'ブランチの必要性を特定し、' br1'と 'br2'から適切なコミットを' cherry-pick'し、それらのブランチを 'shared'に' rebase'することです複数の場所に導入された変更を排除します。 – dahlbyk

+0

お返事ありがとうございます!これは私を助けます。したがって、br1とbr2の間の唯一の共通点は、私のマージよりも共有ブランチの変更が簡単な場合です(競合はありません)。 – Moon4u

関連する問題