版本管理·玩轉git(分支管理)
- 2020 年 1 月 20 日
- 筆記
在開發中,遇到這樣的情況怎麼辦? 網站已有支付寶在線支付功能,要添加"微信支付",修改了兩個文件,wechat.php、pay.php。 剛做到一半,突然有個緊急bug:支付寶支付後不能修改訂單狀態。你需要立即馬上修改這個bug,需要修改的文件是,ali.php、pay.php。 問題是,pay.php文件,已經被你修改了過,而且尚未完成,直接在此基礎上改,肯定有問題。把pay.php倒回去?那我之前的工作白費了。 此時你肯定會想:在做"微信支付"時,能否把倉庫複製一份,不影響原倉庫的內容,修改完畢後,再把副本上的修改合併過去。 好的,這時你已經有了分支的思想。 前面見過的master,即是程式碼的主幹分支。 事實上,在實際的開發中,往往不會直接修改和提交到master分支上,而是創建一個dev分支,在dev分支上,修改測試,再把dev分支合併到master上。 如果有了分支,剛才的難題就好解決了。 在做"微信支付"時,我們創建一個wechat分支,把wechat分支commit,此時,master分支內容不會改變,因為分支不同。 當遇到緊急bug時,創建一個AliBug分支,修復bug後,把AliBug分支合併到master分支上。 再次從容切換到wechat分支上,接著開發"微信支付"功能,開發完畢後,把wechat分支合併到master分支上。
接下來我們詳細地介紹一下。 查看所有分支
git branch

這樣說明只有master分支,且當前處在master分支上,前面的*號代表當前處於的位置。 創建分支
git brand wechat
這時我們查看分支

這時就有了兩個分支,但是我們仍然處於master分支上。 接下來我們切換分支。
git checkout wechat

現在我們就處於wechat分支上了。接下來我們在wechat分支上進行一些修改。

現在config.txt文件被修改了,但此時,master分支上有一個緊急的bug需要你去處理,這時,你就得把手頭上的工作保存起來,然後去處理bug。 我們輸入
git add . git commit -m "wechat todo"
這樣,我們就把在wechat分支上的工作進行了保存。 接下來,我們切換回master分支。
git checkout master
這時候,神奇的事情發生了,看看你的工作目錄,剛才增加的內容現在卻不見了。我們要的就是這個效果,接下來,我們再創建一個分支用於修復bug。
git branch ali
然後切換到ali分支
git checkout ali
在該分支下,我們進行一些操作,在工作目錄中創建一個文件,然後隨意編寫一些內容。

假設此時我們已經修復好了bug,那麼我們就將修改的內容提交到該分支上,接下來就是將該分支合併到master分支上了。 我們先切換到master分支上,會發現我們剛才創建的文件在工作目錄中消失了,然後我們輸入
git merge ali
這是,在ali分支上進行的文件修改操作就都能在工作目錄中被找到了。 這時候,我們又可以切回到wechat分支,進行我們剛才未完成的工作。當完成後,我們就可以將該條分支也合併到master分支上。
刪除分支
git branch -d wechat
注意了,當我們在兩個分支上修改了同一個內容時,在master分支上進行合併的時候,就會產生衝突,因為此時git無法確定你需要的是哪個版本的資訊。

紅色框線內的意思是說,編碼config.txt,衝突(內容):config.txt中的合併衝突,自動合併失敗;修復衝突,然後提交結果。我們看一下衝突的文件。

我們來解決一下衝突,如果我們對著三個值都需要的話,我們就直接把標記刪了就行,如果哪個不需要,就把不需要的值刪了,這裡我就都留著了。

修改完成,我們重新提交一下就可以了。