「Gitの基礎 - rebaseとmergeの使い分け」の版間の差分

ナビゲーションに移動 検索に移動
 
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>


案内メニュー