13,005
回編集
116行目: | 116行目: | ||
mainブランチとtopicブランチが分岐しており、両ブランチで並行開発が行われているものとする。<br> | mainブランチとtopicブランチが分岐しており、両ブランチで並行開発が行われているものとする。<br> | ||
[[ファイル:Git Merge Rebase 2.png|フレームなし|中央]] | [[ファイル:Git Merge Rebase 2.png|フレームなし|中央]] | ||
<center>図. rebase前の状態</center><br> | |||
<br> | <br> | ||
まず、統合前の状態では、masterブランチとtopicブランチの間にコンフリクトが発生する。<br> | まず、統合前の状態では、masterブランチとtopicブランチの間にコンフリクトが発生する。<br> | ||
148行目: | 149行目: | ||
[[ファイル:Git Merge Rebase 4.png|フレームなし|中央]] | [[ファイル:Git Merge Rebase 4.png|フレームなし|中央]] | ||
<center>図. 最終的なmerge (--no-ff) 後の状態</center><br> | <center>図. 最終的なmerge (--no-ff) 後の状態</center><br> | ||
<br><br> | |||
== rebase時のコンフリクトが発生する条件 == | |||
下図において、コンフリクトが発生する条件は、<br> | |||
topicブランチのコミット (3', 6', 8') が、mainブランチの新しいコミット (4, 5, 7) と「同じファイルの同じ部分」を変更している場合のみである。<br> | |||
<br> | |||
[[ファイル:Git Merge Rebase 5.png|フレームなし|中央]] | |||
<br> | |||
# コミット3'のrebase時 | |||
#* masterブランチの4では、別ファイル(file_b.txt)の変更なのでコンフリクト無し。 | |||
#* masterブランチの5において、同じファイル (a.txt) を変更しているためコンフリクトが発生。 | |||
#: <br> | |||
# コミット6'のrebase時 | |||
#* これもa.txtファイルの変更であるため、masterブランチの変更とコンフリクト発生の可能性がある。 | |||
#: <br> | |||
# コミット8'のrebase時 | |||
#* masterブランチの7は、別ファイル (c.txt) の変更であるためコンフリクト無し。 | |||
#* ただし、masterブランチの4で変更されたb.txtファイルとコンフリクト発生の可能性がある。 | |||
<br> | |||
したがって、<br> | |||
* 異なるファイルの変更 | |||
*: コンフリクトは発生しない。 | |||
* 同じファイルでも異なる箇所の変更 | |||
*: コンフリクトは発生しない。 | |||
* 同じファイルの同じ箇所を変更 | |||
*: コンフリクトが発生する。 | |||
<br> | |||
このため、rebaseの作業量は以下に示す要因によって大きく変わる。<br> | |||
* 変更ファイルの重複度 | |||
* 変更箇所の重複度 | |||
* topicブランチのコミット数 | |||
<br><br> | <br><br> | ||