Git的優勢是可以創建不同的branch,然后在每個branch上開發。那么問題是:如果不同的branch之間需要做同步,比如sourceBranch上做的修改也需要同步到targetBranch,改怎么做?
A). 如果一個branchA (targetBranch)是有遠程Git server管理的,另一個branchB (sourceBranch)是自己本地的,即把sourceBranch的修改merge到targetBranch上:
1. cd <your workspace>
2. git branch //假定現在所在的branch是targetBranch,並最好保證沒有未提交的修改,並且已經更新到最新
3. git checkout -b branchB //創建一個本地的sourceBranch並切換到sourceBranch
4. git commit //把sourceBranch上做的修改先提交
5. git checkout branchA //切換回targetBranch
6. git merge --no-ff branchB //把sourceBranch的修改merge到targetBranch。注意:建議merge的時候總是用 --no-ff 選項
7. git status //保證現在workspace是干凈的
8. git push origin branchA //push到遠程,如果遠程有新的修改,先做一下git pull
B). 如果兩個branch都是遠程管理的,想把branchB (sourceBranch)的內容同步到branchA (targetBranch)上
1. cd <your workspace>
2. git branch //假定現在所在的branch是branchA (targetBranch),並最好保證沒有未提交的修改,並且已經更新到最新
3. git checkout branchB //確保同一個workspace能在不同的branch直接切換,即保證 .git/config里 [remote "origin"] 的內容是 fetch = +refs/heads/*:refs/remotes/origin/*
4. git merge branchA //先把targetBranch的修改merge到sourceBranch上,這樣有沖突可以在sourceBranch上先解決,保證之后再merge回targetBranch的時候容易處理,targetBranch不再有沖突
5. 解決conflicts如果merge的結果里有顯示conflicts
6. git commit //解決沖突后先commit到branchB
7. git checkout branchA //切換到targetBranch
8. git merge --no-ff branchB //建議merge的時候總是用 --no-ff 選項
9. git push origin branchA //把sourceBranch的修改merge到targetBranch之后,push到遠程的targetBranch
