2016-08-10 4 views
0

私はこのようになります歴史を開始しました:このシナリオでは、リベースするときにgitはブランチの先端だけを選択することをどのように知っていますか?

O--O(A) 
\ 
    \--O(B)--O(C) 

まず、私はA上に枝Bをリベース:

O--O(A)--O(B) 
\ 
    \--O--O(C) 

その後、私はBCをリベース、これは歴史のように見えたものです:

O--O(A)--O(B)--O(C) 

私は予想していたCC~1をrebaseでBにリベースすると、競合が発生しています。ただし、Cの先端のみがBにリベースされました。

チップはCのチップをリベースすることしか知りませんでしたか? Gitは、rebaseされたBCの親であったことをどうにか知っていますか?

答えて

2

要するに、あなたの最終的な質問に対する答えは「はい」です。 Gitは変更を追跡します。マージやリベースで同じ変更が見つかった場合は、途中でgitされません。

+0

私はちょうど 'C'に' B'をマージしようとしましたが、逆もありません。私はGitがこのようなことをどのくらいうまく処理しているか本当に感心しています。 – jrahhali

1

Gitはちょうどあなたが(あなたのケースCC~で)リベースしたいコミットを取り、(あなたのケースBで)新しいベースにそれらを適用しようとリベース。適用後、C~ Gitはコミットが既に新しいものとしてBとして存在し、このコミットを既に破棄しているので、変更が行われていないことを確認します。以前にいくつかの仲介コミットをチェリーピックしてからチェリーを選んだブランチをチェリーピックしたブランチにリベースした場合も同様です。

関連する問題