git 創建和切換分支

創建分支

在本地終端運行 git branch『分支名稱』 新建一個分支,如新建一個名爲『learn-branch』的分支命令如下:

$ git branch learn-branch

切換分支

創建完分之後使用git branch命令查看分支:

* master
  learn-branch

可以看到『 master 』分支上有一個『*』,說明當前是處在『 master 』分支上,也就是說創建完分支後需要我們手動切換到『learn-branch』,使用git checkout 『分支名稱』命令:

Switched to branch 'learn-branch'

再使用git branch命令查看,會發現已經切換到『learn-branch』分支:

* learn-branch
  master

創建和切換分支兩條命令可以合起來,使用git checkout -b『分支名稱』命令可以創建一個分支並切換到此分支上。

合併分支
快進模式合併
快進式合併分支,也叫『Fast Foreword』,簡單的理解就是當要合併的分之和目標分支之間沒有衝突,只是多做了一些修改時就會採取『Fast Foreword』模式。

例如,我們切換到新建的『learn-branch』分支上,對『learn-git.txt 』文件加一行文字:

I am learning to use git.
然後提交此文件:

$git commit -m "edit learn-git.txt"
[learn-git fce6c4e] branch test
 1 files changed, 1 insertions(+)

接着使用$ git checkout master命令切換回『 master 』分支,再查看『learn-git.txt 』文件,發現剛纔添加的內容並不存在!因爲那個提交是在『learn-branch』分支上,而『 master 』分支此刻的提交點並沒有變。

現在,我們把『learn-branch』分支的內容合併到『 master 』分支上:

 Updating ca62ea0..fce6c4e
 Fast-forward
  learn-branch.txt | 1 +
  1 file changed, 1 insertion(+)

git merge命令用於合併指定分支到當前分支,示例中是把指定分支『learn-branch』合併到『 master 』分支上。

合併完成後會發現『 master 』分支上的『learn-git.txt 』文件內容和在『learn-branch』分支上編輯後的內容完全一樣。此時如果想刪除『learn-branch』分支,可以使用命令$ git branch -d 『分支名稱』。

普通模式合併
當要合併的分之和目標分支之間存在衝突,就無法使用快進合併模式,需要先手動解決衝突,再提交。

例如,我們先切換到『learn-branch』分支,在『learn-git.txt 』文件中寫入下面文字並提交:

I am on "learn-branch" branch.
然後切換到『 master 』分支,在『learn-git.txt 』文件中寫入下面文字並提交:

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 返回結果提醒我們『learn-git.txt 』文件存在衝突,需要我們手動解決衝突。運行 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")

現在我們打開『learn-git.txt 』,會發現 Git 加入了衝突解決標記:

  I am on master branch
  =======
  I am on learn-branch branch
  >>>>>>> learn-branch

可以看到 ======= 隔開的上半部分,是 HEAD(即 master 分支,在運行 merge 命令時的工作分支)中的內容,下半部分是在 learn-branch 分支中的內容。解決衝突的辦法無非是二者選其一或者人工親自整合到一起。把上述內容修改爲這樣:

I am on master branch
接下來運行 git add 來告訴 Git 衝突已經解決,並運行 git commit 來完成合並:

$git commit -m "conflict resolved"
[master cadd265] conflict resloved
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章