github-分支合並、解決沖突、分支現場管理


1.分支合並

1.1 常用命令

git branch   //查看分支

git branch test  //創建一個名為test的分支

git checkout test  //從當前分支切換到test分支

git checkout –b test //創建並切換到test分支

git merge test  //合並test到當前分支

git branch –D test  //強制刪除test分支

1.2 分支合並示例

假如,我們test分支主要工作是創建2.txt,並上傳2.txt.

如下圖所示,可以看到,我們已經切換到了test分支:

 

然后創建一個2.txt,並git add 2.txt:

 

 

 

然后git commit 2.txt -m "提交2.txt":

 

此時我們提交的只是在test分支,在master主分支上,其實並沒有,所以我們還需要將test分支合並到master主分支上.

然后git checkout master,切換分支:

 

如上圖所示,由於2.txt是test分支的,所以當切換到master分支后,就會消失.

然后輸入git merge test,將test合並到分支:

 

如下圖所示,此時就可以看到2.txt已經有了,輸入”git log”,也可以看到2.txt是test分支上傳的:

 

然后將上面的commit值復制下來,輸入git show 8e26b96895a75d971a066da8a822fb7bce1bd874,就可以看到具體提交的內容了.

由於test分支的工作目的已經完成了,所以就可以通過git branch –d test來刪除test分支了.

 

2.分支合並之沖突

之前我們test工作是完成了2.txt創建以及上傳工作,如下圖所示:

 

假如,我們現在共同對已有的2.txt進行修改,那么分支合並的時候,必然會造成沖突.所以我們需要解決沖突.

首先git checkout -b test1,進入test1分支,然后修改2.txt,然后再進行add、commit提交:

 

然后再次git checkout master,進入主分支,可以看到2.txt已經還原為0kb(沒有內容):

 

然后我們此時,在master主分支上修改2.txt,用來模擬其它同事提交:

 

進行add,commit提交:

 

接下來我們便開始合並,進行git merge test1,就會發現2.txt合並沖突:

 

此時再次打開2.txt,可以看到主分支和test1分支分別加了什么:

 

也可以右擊TortoiseGit(小烏龜),來解決沖突:

 

最后內容改為:

 

然后再次add、commit,就解決沖突了,如下圖所示,可以看到當前狀態MERGING已經消失了,說明合並成功了:

 

 

 

3.分支管理工作現場

大部分項目管理中,master主分支都是用來發布版本,存的代碼都是很穩定的.

而子分支主要是用來開發人員干活的,比如添加功能、升級功能等.完成后就會提交合並到主分支上.

場景1:

假如,當前正在實現的A功能,但是還未提交,但是發布版本的代碼中,出現了一個bug,需要臨時修復,但是此時的A功能還未寫完,所以就需要保存A功能所在的代碼現場才行.等修復bug完成后,再恢復A功能工作現場,繼續實現A功能.

場景2:

假如,當前正在實現的A功能周期長,但是在此期間,其他開發人員已經更新了很多功能並合並到主分支上了,此時我們A功能才完成,所以需要保存A功能所在的代碼現場,然后從主分支同步代碼下來,最后再恢復A功能工作現場,然后提交代碼,並檢查合並代碼沖突.

 

3.1 要用到的相關命令

git stash
//存儲當前工作現場

git stash list
//查看git stash列表

git stash apply stash@{X}
//從git stash列表中恢復指定的存儲列, 比如git stash apply stash@{1},把版本號為stash@{1}的備份取出(而0對應最新版本),不會刪除對應的stash

git stash drop stash@{X}

//從git stash列表中刪除某列,比如git stash drop stash@{1}

git stash pop
//恢復最近一次stash存儲的列內容, 獲取之后會刪除棧中對應的stash。

git merge master
//從master合並代碼到本分支上.

git branch –D test1
//刪除test1分支,並會丟棄test1上的未合並過的代碼,比如A功能不需要實現了.

 

3.2 模擬場景1(funA分支:實現A功能哪個、bug分支:用來解決bug問題)

首先通過"git checkout -b funcA"進入funcA分支, 向2.txt添加"實現功能A"字段來模擬實現功能A,:

 

此時發現了之前寫的2.txt有一個bug,首先輸入git stash,保存功能A當前現場:

 

如上圖所示,git stash后,再次git status,可以看到2.txt已經復原了,而修改的內容則保存在了stash表中.

然后切換到bug分支, 向2.txt添加"解決bug問題"字段來模擬解決bug場景,然后提交文件:

 

然后切換到master,通過git merge bug來合並剛剛解決的bug問題,然后通過git log,查看剛剛合並的版本號:

 

也可以通過git log --oneline查看精簡版log:

 

解決完bug后進入funcA分支,並刪除bug分支:

 

然后輸入git merge master,將剛剛修改的bug代碼合並到當前分支里:

 

最后輸入git stash pop,把功能A工作現場恢復到2.txt,由於2.txt之前解決過bug,所以還要解決合並沖突.

也可以通過右擊TortoiseGit(小烏龜),來解決沖突:

 

修改如下:

 

然后再次輸入以下命令進行文件提交和同步,即可完成:

$ git add 2.txt

$ git commit -m "合並master后,並升級功能A"

$ git checkout master               //切換到master

$ git merge funcA                   //然后合並funcA分支到master中

$ git branch -D funcA               //功能A完成,刪除funcA分支

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM