本地分支管理
創(chuàng)建和切換分支
創(chuàng)建分支
在本地終端運(yùn)行?git branch『分支名稱』?新建一個(gè)分支,如新建一個(gè)名為『learn-branch』的分支命令如下:
python
$ git branch learn-branch
切換分支
創(chuàng)建完分之后使用git branch命令查看分支:
python
$ git branch
* master
? learn-branch
可以看到『 master 』分支上有一個(gè)『*』赶么,說(shuō)明當(dāng)前是處在『 master 』分支上协怒,也就是說(shuō)創(chuàng)建完分支后需要我們手動(dòng)切換到『learn-branch』秆乳,使用git checkout 『分支名稱』命令:
python
$ git checkout learn-branch
Switched to branch 'learn-branch'
再使用git branch命令查看姑廉,會(huì)發(fā)現(xiàn)已經(jīng)切換到『learn-branch』分支:
python
$ git branch
* learn-branch
? master
創(chuàng)建和切換分支兩條命令可以合起來(lái),使用git checkout -b『分支名稱』命令可以創(chuàng)建一個(gè)分支并切換到此分支上蜗字。
合并分支
快進(jìn)模式合并
快進(jìn)式合并分支汤徽,也叫『Fast Foreword』娩缰,簡(jiǎn)單的理解就是當(dāng)要合并的分之和目標(biāo)分支之間沒(méi)有沖突,只是多做了一些修改時(shí)就會(huì)采取『Fast Foreword』模式谒府。
例如漆羔,我們切換到新建的『learn-branch』分支上,對(duì)『learn-git.txt 』文件加一行文字:
I am learning to use git.
然后提交此文件:
$git add learn-branch.txt
$git commit -m "edit learn-git.txt"
[learn-git fce6c4e] branch test
? 1 files changed, 1 insertions(+)
接著使用$ git checkout master命令切換回『 master 』分支狱掂,再查看『learn-git.txt 』文件演痒,發(fā)現(xiàn)剛才添加的內(nèi)容并不存在!因?yàn)槟莻€(gè)提交是在『learn-branch』分支上趋惨,而『 master 』分支此刻的提交點(diǎn)并沒(méi)有變鸟顺。
現(xiàn)在,我們把『learn-branch』分支的內(nèi)容合并到『 master 』分支上:
$ git merge learn-branch
Updating ca62ea0..fce6c4e
Fast-forward
? learn-branch.txt | 1 +
? 1 file changed, 1 insertion(+)
git merge命令用于合并指定分支到當(dāng)前分支,示例中是把指定分支『learn-branch』合并到『 master 』分支上讯嫂。
合并完成后會(huì)發(fā)現(xiàn)『 master 』分支上的『learn-git.txt 』文件內(nèi)容和在『learn-branch』分支上編輯后的內(nèi)容完全一樣蹦锋。此時(shí)如果想刪除『learn-branch』分支,可以使用命令$ git branch -d 『分支名稱』欧芽。
普通模式合并
當(dāng)要合并的分之和目標(biāo)分支之間存在沖突莉掂,就無(wú)法使用快進(jìn)合并模式,需要先手動(dòng)解決沖突千扔,再提交憎妙。
例如,我們先切換到『learn-branch』分支曲楚,在『learn-git.txt 』文件中寫(xiě)入下面文字并提交:
I am on "learn-branch" branch.
然后切換到『 master 』分支厘唾,在『learn-git.txt 』文件中寫(xiě)入下面文字并提交:
I am on "master" branch.
接著輸入git merge learn-branch命令:
$ git merge learn-branch
? Auto-merging learn-branch.txt
? CONFLICT (content): Merge conflict in learn-git.txt
? Automatic merge failed; fix conflicts and then commit the result.
Git 返回結(jié)果提醒我們『learn-git.txt 』文件存在沖突,需要我們手動(dòng)解決沖突龙誊。運(yùn)行?git status?命令抚垃,也可以看到出現(xiàn)沖突狀況:
$ git status
On branch master
You have unmerged paths.
? (fix conflicts and run "git commit")
Unmerged paths:
? (use "git add ..." to mark resolution)
? ? ? both modified:? ? ? learn-git.txt
no changes added to commit (use "git add" and/or "git commit -a")
現(xiàn)在我們打開(kāi)『learn-git.txt 』,會(huì)發(fā)現(xiàn) Git 加入了沖突解決標(biāo)記:
? <<<<<<< HEAD
? I am on master branch
? =======
? I am on learn-branch branch
? >>>>>>> learn-branch
可以看到 ======= 隔開(kāi)的上半部分趟大,是 HEAD(即 master 分支鹤树,在運(yùn)行 merge 命令時(shí)的工作分支)中的內(nèi)容,下半部分是在 learn-branch 分支中的內(nèi)容逊朽。解決沖突的辦法無(wú)非是二者選其一或者人工親自整合到一起罕伯。把上述內(nèi)容修改為這樣:
I am on master branch
接下來(lái)運(yùn)行?git add?來(lái)告訴 Git 沖突已經(jīng)解決,并運(yùn)行?git commit?來(lái)完成合并:
$git add learn-git.txt
$git commit -m "conflict resolved"
[master cadd265] conflict resloved