2016-10-13 5 views
0

リモートリポジトリがあり、ローカルに複製すると仮定します。 origin/masterからの分岐とローカルマスタからの分岐の比較

は、私たちは地元の masterとリモート remotes/origin/masterを持っているので、今 masterブランチをチェックアウト。私はその後、一度見直さリモート・マスターにマージされる新しい トピックブランチ作成する必要が

:リモート同等の対master地元から分岐の長所と短所は何ですか

を(あれば違いはありますか?)

と同じ引数を長時間実行するブランチに適用しますか?

編集:私は私の地元の支店のためのorigin/masterを追跡しようとしていると私は大きな欠点に気づい

:TFS上で、それはあなたがプルリクエストを作成することはできません。必要な場合は、ブランチを元に戻す必要があります。これにより、ブランチをマスターから切り離し、新しいリモートブランチを追跡してからプルリクエストを作成します。私が言ったことに何か間違っていますか?そうでない場合は、origin/masterから分岐しない大きな理由です。

+0

'git pull'と' git push'の振る舞いについて、新しいブランチのトラッキング情報も設定すると、以下のほとんどの答えが無視されます。トラッキングは通常、リモート参照を分岐するときに自動的に設定されますが、ローカル参照からは分岐しないことに注意してください。 –

+0

@AndréSassiどのようにリモートブランチから分岐するかによって異なります。 – poke

+0

私は、ローカルマスターが最新であると仮定して答えの大半を考えると思います。ローカルのマスターにランダムなものをコミットし、それらを忘れるのは簡単です。手動でブランチを作成しているのであれば、それほど大きな問題ではないかもしれませんが、もっと自動化する(例えば、チケット発行システムと統合されたスクリプトなど)場合、この自動化を多くのユーザに提供するには、原点/マスター 'あなたがしなければならないときに 'master 'が最新のもので、同期が外れていないと仮定するのはどうしてですか? – Chris

答えて

1

ローカルブランチがリモートブランチで最新である限り、違いはありません。どちらもコミット/ポイントインタイムで行われるので、どちらから始めるかは関係ありません。

ただし、リモートブランチにマージされることが保証されていないローカルブランチをマスターブランチに変更した場合は、新しいブランチがマージするリモートブランチからマージすることができます。この場合、2つのブランチには異なるコミットが含まれているため、2つの間に違いがあります。

一般に、最後にマージしたいブランチからブランチを開始するというルールがあります。リモートブランチをトラッキングすると、1対1のローカル対ローカルの違いはありません。

+0

それで基本的に私は変わる可能性のないものから分岐するべきですか?ローカルマスターからブランチして変更すると、どのような問題が発生する可能性がありますか?マスターに新しいコミットを含めることなく、新しいブランチからリモートに変更をプッシュするだけのメンテナンスがありますか? –

+0

@Uno私の答えで説明したように、新しいブランチはそれをベースにしているブランチとは関係がありません。 "分岐オフ"のときは、ちょうど一時的な名前(ブランチ)を持つベース*コミット*(ブランチではない)を選択するだけです。 – poke

1

リモートトラッキングブランチorigin/mastermasterが最新であると仮定すると、実際の違いはまったくありません。

ブランチはヒストリ内のコミットのポインタに過ぎないので、あるブランチから分岐するときは、同じターゲットを指す別のポインタを作成するだけです。そのポインタは "元のポインタ/分岐"とは関係ありません。コミットを指すだけです。したがって、新しいブランチで作業を続ける場合、新しいコミットは、コミットの親関係を使用してベースを参照するだけです。支店自体は歴史とは完全に無関係です。

Gitには、ブランチに何らかのメタデータを追加する方法があります。しかしながら、標準的な分岐機構、例えば。 git branchまたはgit checkout -bを使用すると、Gitはのいずれかの追加メタデータをブランチに追加しません。

唯一の関連メタデータは、リモート追跡ブランチです。しかし、通常は、1つ以上のブランチが同じアップストリームブランチを追跡することは望ましくありません。

あなたの場合、機能ブランチなどを作成するときは、masterまたはorigin/masterをブランチしてください。それは本当に重要ではありません。

+0

masterとorigin/masterが同期していない場合はどうなりますか?それは起源/マスターからマスターへの変更を引っ張ってから私の支店をマージするのとまったく同じでしょうか? –

+0

同期していない場合、 'master'を分岐すると' master'と同じコミットに新しいブランチが配置され、 'origin/master'を分岐すると新しいブランチがコミットされます。 'master'も' origin/master'にも影響しません。マージするときは、マージする順序によって異なります。たとえば、 'origin/master'を分岐してから作業をし、最後にその新しいブランチを' master'にマージすると、 'origin/master'からの変更を間接的に引き込みます'マスター '。 – poke

+0

origin/masterからの変更を間接的に取得すると、トピックブランチの変更と競合する可能性があります。このシナリオでは、2つのアプローチに違いはありますか? –

0

絶対的な賛否両論はありません。 1つの支店または別の支社からの履歴から始めるだけです。ローカルマスタは、PCのマスタブランチです。リモートマスターは、リモートPC(サーバーなど)のマスターブランチに過ぎません。彼らは両方とも、同じ名前を共有しているマシンのローカルブランチです。

唯一の違いは、リモートは、複数のユーザーにまたがるハブとして機能することです()。私はgitの何もリモートブランチを "ハブ"にすることはないので、行為を強調します。あなたのチームが大会としてハブとして使用するだけです。

上流ブランチを暗黙的に1つまたは他のブランチから設定できるような微妙な利点があります。または、リモートから直接分岐することによって、ローカルのマスターブランチがリモートと完全に最新ではないことを心配する必要はありません。

これらのことを考えると、地方支店の代わりに支店を利用して支店を分割する方法についてはわかりませんが、それができると仮定すると、上記は正確であるはずです。

+0

ローカルマスタがorigin/masterで最新でなく、ローカルからIブランチに移行していない場合、どのようなシナリオで問題が発生する可能性がありますか? –

1

git fetchを実行すると常にorigin/masterが最新の状態になるため、ほとんどの環境でorigin/masterが正しいと思われる可能性があります。すべての開発でトピックブランチを使用しているときは、ローカルのmasterが迷惑であることがわかります。なぜなら、それは役に立たないにしても時々更新する必要があるからです。

ローカルのmasterを開発のベースとして好む理由は、あなたがそれをより詳細に制御できるということです。誰かがリモコンmasterに誤って強制的に押し込むと、ローカルmasterにマージしようとしたときに気付く可能性がありますが、origin/masterは自動的に新しい履歴を指し示します。アップストリームの変更を引き続き取得できる一方で、開発のための安定した基盤が必要なのでしょうか?

+0

ローカルの「マスター」を持つ理由の1つは、トピックブランチで*をマージする機能です。 – poke

+0

origin/masterを好む良い説明。私はあなたが地元の支店に有利な点を理解しているかどうかわからない、それを明確にしてもらえますか? (もし誰かが誤った強制押しをしたら...) –

+0

@poke、あなたはそれを本当に必要としません。単に 'origin/master'をチェックアウトしてマージしてください。分離された頭の上で作業していますが、プッシュする前に単一のマージコミットを作成しているだけです。名前を付ける必要はありません。それは本当に同じ議論です:地元のマスターは、それが最新のものであることを確実にするためにもう少し努力を払いますが、マージ時にはより重要なことです(ブランチを作るときの節)。 – Chris

0

ブランチという新しいブランチを作成したい場合は、通常、git serverからシステム内のローカルコミットを最新のものにチェックアウトし、マスターコードをBranch1という名前の新しいローカルブランチにチェックアウトし、Branch1をコミット後のgitサーバー。ここでのポイントは、マスターコードを最新にすることです。