2017-08-19 1 views
-1

$ git rebaseはバックグラウンドで何をしているのか分かります。gitはバックグラウンドで何をマージしますか?

A -- B -- C 
     \ 
     D -- E 

$ git rebaseたちはeで行ったすべての変更を覚えています(ベースはbある)と塩基cでそれらを適用します。これを前提としています。だから、結果は次のとおりです。

A -- B -- C -- D' -- E' 

今私は、バックグラウンドで何$ git merge、知りたいですか?実際に興味深い部分は "マージは矛盾する可能性がありますが、リベース"はありません。あなたが(例えば、押したときに)その上流ブランチにブランチをマージする必要がありますとき、競合を避けるために:競合を避けるために

+4

Rebase do conflicts !!!! – Francesco

+0

@Francesco本当に!私はどこかで読んでいます:競合を避けるための1つの方法は、 'merge' *の前に' rebase'を使っています*(引用にはわかりませんが、類似しています)* –

+2

[git mergeとgit rebaseの違いは? ](https://stackoverflow.com/questions/16666089/whats-the-difference-between-git-merge-and-git-base) – Joe

答えて

1

は、はい確かに

をマージする前にリベース使用しているスキーマから、マージは早送りのものになります。

さらに、競合解決を覚えておくためにリベースをトレーニングすることができます。つまり、同じ競合をすべて解決せずに複数の時間をリベースすることができます。 See git rererenot initially activate rerereを行った場合でも動作しますが、manual retrainingを実行することもできます)。

私は(this answerでも)rebasing (pull --rebase) before pushingをお勧めする理由です:あなたは、可能なマージを解決するには、ローカルのコミットを押し戻す前に、ローカルで(あなたの地元のレポで)を競合します。

間違いなく、別のブランチの上にコミットのそれぞれを再適用します。したがって、マージ競合が発生する可能性があります。
これはwill be better expressed in Git 2.14です。

1

競合はコミットやツリー比較とは関係ありません。

ブランチ1のファイルA、B、Cに変更を加え、Bの内容が異なるブランチ2に移動すると、ファイルBに競合が発生します。まったくコミットしない。

さまざまな方法でマージとリベースが動作します。マージとリベースの最も基本的な違いの1つは、マージコミットに複数の親コミットがあることです。マージコミットを元に戻したい場合は、親の番号を指定する必要があります。

マージがコミットされる方法は、たとえば、マージするブランチに4つのコミットがある場合、マージコミットはメインブランチの上に行われ、4つのコミットの変更の合計(コミットしたときに得られるものに似ています)。競合が発生した場合、すべての変更のすべての競合を一度に取得します。

リベースは異なります - 変更はコミットによってコミットされます。コミット2に競合がある場合は、3が適用される前に解決されなければなりません。 コミットのIDも、リベースされたコミットであることを示すように変更されます。

+0

ありがとう、upvote –

関連する問題