git merge と git rebaseの履歴

git merge と git rebaseの違い。


masterのHEADはポイントA

  (master) ---A


masterのHEADはポイントA
Aからブランチしたworkingを作成し、Bまで進める

  (master) ---A 
               \
  (working)     \-----B


ここまでだったら (master) git merge working で
workingの変更をmergeできる。

そこからさらに masterでも変更し A'まで進めたとする

  (master) ---A -------------A'
               \
  (working)     \-----B


(master) git merge working ではmergeできない

  fatal: You have not concluded your merge (MERGE_HEAD exists).
  Please, commit your changes before you can merge.


と言われる。

(master) git rebase working する

  First, rewinding head to replay your work on top of it...
  Applying: commit1
  Applying: commit2


するとこうなる

  (master) ---A         ------A''
               \       /
  (working)     \-----B


コミットA'の存在はmasterからはなくなって、
Bからの続きとして AからA'の差分がマージされて A''になる