有一個遠程倉庫origin:
本地在此基礎上又進行了兩次提交:
這時候其他人進行了一次遠程push:
因為git是分布式的,原則上可以不用連服務器,所以此時本地並不知道遠程分支已經變更(本地的origin/master已經過時):
git fetch命令會將遠程最新的版本拉取到本地,但是並不會影響本地的分支線:
git fetch <遠程主機名> <遠程分支>
git meger會將本地和遠程的最新提交混合起來,並生成新的最新提交(混合並解決沖突后的提交):
git pull命令等於git fetch + git meger命令。
我們再看下上面git fetch命令后的本地狀態:
這時候我們並不想混合提交,而是想在C2的基礎上直接提交L2和L3,這時候在提交歷史線上不會有分支線。這個可以用git rebase命令實現:
日常開發步驟如下:
- git fetch
- git rebase
- 解決沖突
- git add 沖突文件
- git rebase –continue
- git push
其中,3、4、5點,如果沒遇到沖突就不用進行,直接push上去。
當遇到沖突時,git會提示patch failed,並要我們解決問題了再執行git rebase --continue