1. 程式人生 > >Git學習筆記三:Git分支

Git學習筆記三:Git分支

git預設只有一條主分支,稱為master,master上一般是穩定的系統,當我們開發新功能的時候,應該新建一個分支(branch),在分支下面做開發工作,確認分支下的系統通過測試之後,再將分支合併到master主分支上。原則上,可以新建多個分支,各分支上的工作互不干擾。 1、如何新建並切換分支 $git checkout -b mybranch 這條命令相當於執行了以下兩條命令 $git branch mybranch $git checkout mybranch Switched to a new branch 'mybranch' M test.txt 2、如何檢視現有的分支 $git branch
master * mybranch 我們可以看出,mybranch左邊有一個*號,證明目前的指標是在mybranch分支上的,所以我們所做的commit操作也是在mybranch上面執行,不會影響master 3、合併分支 我們先把text.txt寫上hello world,執行add和commit指令。如下: $ git add test.txt $git commit -m "提交helloworld" 然後執行 $git checkout master 此時我們可以發現,test.txt裡面的hello world文字資訊消失了!由於我們切換回了主分支,mybranch分支上的修改是不會對主分支產生影響的,所以接下來,我們需要將mybranch分支上的修改合併到master主分支上。
$git merge mybranch Updating 03ea170..9b520e0 Fast-forward test.txt | 1 + 1 file changed, 1 insertion(+) 現在開啟text.txt,就可以看到hello world了。這裡需要注意到的一點是,這裡採用了fast-forward的模式,這種模式合併是不會產生合併歷史記錄的,也就是不能通過git log查到有這條合併記錄,可以加上--no-ff強勢不使用fast-forward模式: $git merge --no-ff -m "合併分支" mybranch 4、刪除分支 當我們開發完功能並將分支合併到master主分支上之後,mybranch分支就可以刪掉了。
$git branch -d mybranch 5、產生衝突 在多人協作的時候,衝突是不可避免的,衝突的概念這裡就不講了,我們來模擬一個版本衝突。 $git checkout -b dev 修改test.txt文字,追加字串“dev branch”,此時文字內容為"hello world dev branch" $git add test.txt $git commit -m "dev branch commit" 切換回master主分支 $git checkout master 修改test.txt文字,追加字串“master”,此時文字內容為"hello world master" $git add test.txt $git commit -m "master branch commit" $git merge dev 此時就會出現衝突提示,因為dev分支和主分支都有修改檔案,而且它們提交的上一個版本是相同的,這時候就會有衝突,提示資訊如下: Auto-merging test.txt CONFLICT (content): Merge conflict in test.txt Automatic merge failed; fix conflicts and then commit the result. 我們開啟test.txt,就會發現裡面的文字如下: <<<<<<< HEAD hello world master ======= hello world dev branch >>>>>>> dev 意思是當前版本資訊為hello world master,而dev分支資訊為hello world dev branch,它們合併的時候起了衝突,我們使用 $git status 檢視的時候,會看到紅色的字型資訊:both modified: test.txt 6、解決衝突 手動開啟test.txt並對內容修改為"hello world!",修改完成後執行以下命令,其中,git add命令就是標記衝突已解決 $git add test.txt $git commit -m "conflict fix" $git status 就可以看到如下內容,證明衝突已經得到解決,並且工作空間是乾淨的。 nothing to commit, working tree clean 接下來我們可以使用如下命令檢視合併歷史情況: git log --graph --pretty=oneline --abbrev-commit * 875fe91 (HEAD -> master) conflict fix |\ | * 3fbc131 (dev) dev branch commit * | 542ceca master branch commit |/ * 9b520e0 提交hello world 最後,合併之後記得可以刪掉dev分支,大功告成