Git學習筆記三:Git分支
阿新 • • 發佈:2019-02-12
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分支,大功告成