2016-08-10 12 views
0

これは愚かな質問かもしれません。しかし。私がGitを使い始めたとき、私は、機能ブランチを扱うときに、マスターに合併する前に、マスターからブランチまでのすべてをマージする必要があると言われました。さて、私はテストの観点から理解することができます。マスターにマージする前にすべてが自分のコードで正しく動作していることを知るには、まず自分のブランチでテストしなければならないので、マスターからブランチにマージする必要があります。 私の現在のプロジェクトでは、別のワークフローがあります。私は機能ブランチを持っていますし、マスターはステージングブランチとして機能し、次に別のプロダクションブランチを持っています。素晴らしいワークフローbtw。マージ時のgit解決方法は?

しかし、これは私が分岐とマージが実際にgitでどのように機能するかを考え始めるようになってしまいました。開発者D1がブランチAを作成し、その後に開発者D2がブランチBを作成した場合、開発者D1はブランチAをマスタにマージして作業します。今D2は自分の支店Bをマスタにマージします。 D2によって実際に変更されたファイルだけがmasterにマージされるか、またはD2がブランチを作成したときに存在したすべてのファイルを変更していないものをマージしようとしますか?彼のマージを試みる前にD2がマスターからブランチBに合併したか、それとも重要ではないのですか?

私の推測では、Gitが変更されたファイルのみをマージするということですが、私は100%を確認していない:)

+0

[2つのブランチとGitの履歴をマージする] ://stackoverflow.com/q/33100123/26396) –

答えて

1

マージは、2つの開発ラインの変化を兼ね備えています。ですから、Gitリポジトリを指示しない限り、それ以外の場合はBmasterを上書きしませんが、それはmasterBで行った変更を結合し、masterようになるAが既ににマージしている、それらの変更masterです。

1

gitのマージ操作は、常にリポジトリ全体に作用します。ファイルベースのマージはありません。

これは、ファイルごとの3方向マージ(通常通り)です。 masterにあなたの機能ブランチAをマージする場合には、意味:

  • Gitは最年少共通のAmasterの間でコミットでしょう。 oldmasterとしましょう。
  • gitはoldmasterAの違いを見つけ、これらの相違点(パッチ)を現在のmasterに適用しようとします。ファイルごとにファイルを作成します。特定のファイルに相違がない場合は、もちろんそのファイルには何もしません。
  • 最後に、1つの(マージ)コミットを取得します。すべての異なるファイルのすべてのパッチは1つとしてコミットされます。このコミットはAmasterの両方を親として持つでしょう。

は、特にご質問にお答えするには:

のみD2によって実際に変更されたファイルがマスタにマージされます、

はい。

または変更されていないものであってもD2がブランチを作成したときに存在していたすべてのファイルをマージしようとしますか?

はい。 gitはそれらを "試し"ますが、変更がないことを知るので、それはノーオペレーションです。

マージを試行する前にD2をマスターからブランチBにマージしてくださいか、それとも問題ありませんか?

それは(あなたが実際にマスターとを何をしますか)ワークフローによって異なりますが、一般的にはありません、「デフォルトあたりの」それを行うには技術的な理由はありません。 gitはsvnではなく、あらゆる種類のマージを行うことができます。 (「昔のように」svnのようないくつかの制限が、マージを複雑にしているものを「再統合」するすべてのものを持っていたように)ではありません。

私の推測では、Gitが変更されたファイルのみをマージするということですが、私は100%を確認していない:)

手段を「マージ」何が。マージは、AからBへのすべてのものをコピーすることを意味するのではなく、共通の親に対して、どのように変更されたかを調べることです。

関連する問題