git merge和git rebase總結
阿新 • • 發佈:2022-03-26
dev分支
* da349ef (dev) e
* 75350bc d
* 63cbbb8 c
* c6509a5 b
* 13405af a
檔案可能會發生衝突,需要解決一下
aaaaaaaaa
bbbbbbbbb
ccccccccc
<<<<<<< HEAD
fffffffff
ggggggggg
=======
ddddddddd
eeeeeeeee
>>>>>>> dev
最後結果
* 85ef130 (HEAD -> master) Merge branch 'dev' |\ | * da349ef (dev) e | * 75350bc d * | b553464 g * | 6d56d3d f |/ * 63cbbb8 c * c6509a5 b * 13405af a
可以看出,merge 有保留dev分支的痕跡,相當於建立了一個85ef130 commit 並同時指向了da349ef (dev) e和
b553464 g
再看rebase是如何處理的
Master 分支
* 2a4e835 (HEAD -> master) d
* 706b742 c
* 4807917 b
* 59a582d a
dev 分支
* 0a6ecdd (HEAD -> dev) f
* 42b6702 e
* 706b742 c
* 4807917 b
* 59a582d a
使用rebase合併分支
在master 上執行
git rebase dev
(著重理解這句話
可能會有衝突,解一下
aaaaaa
bbbbbb
cccccc
<<<<<<< HEAD //這裡是dev 的內容
eeeeee
ffffff
=======
dddddd
>>>>>>> d // 這裡是master的內容
衝突時,衝突部分與merge不同,相當於將master的差異程式碼往dev合併,然後產生了一個新的commit,之後將master變基到這個新的commit-id 上
解決衝突後執行 git add <conflicted_files>
rebase操作是持續執行的,如果還有衝突,繼續執行上述操作(好處是:也方便一個衝突一個衝突的解決)
rebase 合併成功後(有的也翻譯為變基),在master上檢視git日誌
* ff1a394 (HEAD -> master) d //這裡是新建立的一個commitid,commit註釋為d master變基到此
* 0a6ecdd (dev) f
* 42b6702 e
* 706b742 c
* 4807917 b
* 59a582d a