Git是協做開發中必不可少的,簡單的一我的一個分支沒有太多須要掌握的,但若是是大型團隊,幾十個功能同時開發,如何協同良好的使用Git成爲了項目順利進展的基石。若是你即將或剛進入這種大型開發團隊,那麼本文值得一看。git
在合併代碼或拉取新代碼的時候,git會自動生成一個merge的commit,而且分支樹在多人開發時變得凌亂不堪。spa
若是咱們有兩個分支:master和feature以下圖。如今須要把feature分支合併到master分支。開發
建立新分支rem
使用:(master)git merge feature && git pullit
merge新分支ast
使用:(master)git rebase feature && git pull --reabseim
rebase新分支項目
小結:若是你的當前分支落後於遠程分支,而且你有了本身新的commit,使用git pull會產生一個merge的commit信息。若是使用git pull --rebase,那麼會git會將你的commit先放一邊,而後把遠程分支的內容拉取到你的本地,接着再自動把你的commit放在最上面。中途發生衝突,在解決衝突後使用git rebase --continue來繼續rebase操做word
如今,feature分支有了4個新的commit,可是咱們只須要其中的一個或幾個合併到masterimg
cherry-pick多個提交
咱們可使用git cherry-pick命令。
git cherry-pick [commitID] 提取一個commit
git cherry-pick [start-commitID]..[end-commitID] 提取一個commit到另外一個commit之間的因此commit,不包括start-commitID,包括end-commitID。
git cherry-pick start-commitID]^..[end-commitID] 提取一個commit到另外一個commit之間的因此commit,包括start-commitID,包括end-commitID。
在使用git cherry-pick過程當中若是遇到衝突,解決衝突後使用git cherry-pick --continue來繼續cherry-pick操做。
cherry-pick提取其中幾個提交
一個commit其實就是一個文件修改的補丁,cherry-pick就是單純的把這個文件修改補丁提取,對於被提取的分支不會發生任何變化。
開發一個新功能,每每會有多個commit信息,但咱們在合併的時候,只但願有一個commit信息。rebase -i命令能夠幫助咱們修改本次合併的全部commit信息
如今,咱們在feature有4個commit信息,咱們須要把feature合入master,而且但願全部的commit合成一個commit
建立了4個commit
把feature上的4個commit rebase到master後,經過git status查看
查看git status
能夠看到,如今和遠程分支相比有4個提交
執行git rebase -i
執行git rebaes -i
能夠看到,reabse -i的做用是用來編輯全部的commit,也就是在push到遠程分支以前,咱們能夠「隨心所欲」,能夠看到有多個命令可使用。
p, pick = 使用此commit。(p是pick命令的縮寫,兩種方式均支持)
r, reword = 使用此commit, 編輯commit messagee,
e, edit = 使用此commit,而且把commit信息放在第一個,使用commit --amend來修改commit信息
s, squash = 使用此commit,可是合併到前一個commit中去f,
f, fixup = 和squash相似,可是放棄此commit的message
具體的使用仍是要本身試試才能體會。
在這裏,咱們把後三個改爲s
修改命令
接着保存會進入一個commit編輯界面
進入新的commit界面
這個時候能夠修改咱們的commit信息了,這個commit包含了合成的4個commit,咱們把commit信息修改爲"commit 1,2,3,4"
再使用git log 查看
查看git status
查看git log
最終的分支樹
git push [remote] [commit-id]:[branch]
再push到遠程倉庫就大功告成了。
文/劉東寰(簡書做者) 原文連接:http://www.jianshu.com/p/ca5a8b53baa5 著做權歸做者全部,轉載請聯繫做者得到受權,並標註「簡書做者」。