Git分支管理

分支管理

git branch

列出全部分支,當前分支前面會標一個*號git

$ git branch
* dev
  master

表示有兩個分支,當前分支爲dev。app

git branch命令的-r選項,能夠用來查看遠程分支,-a選項查看全部分支。測試

$ git branch -r
MyName/master

$ git branch -a
* master
  remotes/origin/master

上面命令表示,本地倉庫的當前分支是master,遠程分支是origin/master。3d

git branch命令的-d選項,用於刪除分支(刪除分支不能在 被刪除分支上 進行)code

$ git branch -d test
Deleted branch test (was 64fcede).

git checkout <分支>

切換分支blog

$ git checkout -b dev origin/master

上面命令表示,在origin/master的基礎上,建立一個新分支並切換至新分支。git checkout命令加上-b參數表示建立並切換,即至關於:開發

$ git branch dev //建立dev分支
$ git checkout dev //切換到dev分支
Switched to branch 'dev'

git merge

合併指定分支到當前分支rem

$ git merge dev

衝突狀況

當爲dev進行新的一次提交,切換到master分支,會看到Git還會自動提示咱們當前master分支比遠程的master分支要超前1個提交。文檔

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'MyName/master' by 1 commit.
  (use "git push" to publish your local commits)

接下來爲master分支也進行一次新的提交,而後合併dev分支it

$ git merge dev
Auto-merging 新建文本文檔.txt
CONFLICT (content): Merge conflict in 新建文本文檔.txt
Automatic merge failed; fix conflicts and then commit the result.

能夠看到git提示txt文件存在衝突,必須手動解決衝突後再提交。此時查看修改的txt

$ cat 新建文本文檔.txt
123
<<<<<<< HEAD
master change
=======
dev change
>>>>>>> dev

Git用<<<<<<<,=======,>>>>>>>標記出不一樣分支的內容

接下來對內容進行修改再提交

git add *
$ git commit -m'conflict fixed'
[master a94df7f] conflict fixed

分支合併狀況可用帶參數的git log查看
image

分支策略

版本庫的兩條主要分支:Master和Develop。前者用於正式發佈,後者用於平常開發。

除了常設分支之外,還有一些臨時性分支,用於應對一些特定目的的版本開發。臨時性分支主要有三種:

  • 功能(feature)分支
  • 預發佈(release)分支
  • 修補bug(fixbug)分支

這三種分支都屬於臨時性須要,使用完之後,應該刪除,使得代碼庫的常設分支始終只有Master和Develop。

功能分支

第一種是功能分支,它是爲了開發某種特定功能,從Develop分支上面分出來的。開發完成後,要再併入Develop,而後刪除feature分支。

功能分支的名字,能夠採用feature-*的形式命名。

預發佈分支

它是指發佈正式版本以前(即合併到Master分支以前),咱們可能須要有一個預發佈的版本進行測試。

預發佈分支是從Develop分支上面分出來的,預發佈結束之後,必須合併進Master和Develop分支,而後刪除預發佈分支。它的命名,能夠採用release-*的形式。

修補bug分支

軟件正式發佈之後,不免會出現bug。這時就須要建立一個分支,進行bug修補。

修補bug分支是從Master分支上面分出來的。修補結束之後,再合併進Master和Develop分支,而後刪除bug分支。它的命名,能夠採用fixbug-*的形式。

bug分支特殊情形

假若有個場景,在工做中,接到個bug修復任務,此時你正在dev進行的工做尚未提交也沒辦法提交(還未完成),注意,未提交狀態下切換分支會將狀態合併到切換分支。要想將dev正在進行的工做現場保存起來,就須要使用Git提供的 git stash

$ git stash
Saved working directory and index state WIP on dev: d5dd078 working

查看工做區,能夠看到是乾淨的

$ git status
On branch dev
nothing to commit, working tree clean

接下來,就要肯定bug在哪一個分支,切換到對應分支並建立臨時分支

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'MyName/master' by 11 commits.
  (use "git push" to publish your local commits)

$ git checkout -b bug
Switched to a new branch 'bug'

完成修復bug後,切換到master分支接着完成合並,最後刪除bug分支,bug修復工做便完全結束。

接下來就要回到本來的dev工做了

git checkout dev

以前的保存的工做現場就用git stash list進行查看

$ git stash list
stash@{0}: WIP on dev: d5dd078 working

能夠看到現場被保存在某個地方,接下來有兩個方法恢復:

一是用git stash apply,恢復後stash內容不刪除,要刪除的話須要用git stash drop命令

二是用git stash pop,恢復的同時把stash內容刪除。

強行刪除還未合併的分支

假如你在開發一個新功能,最好新建一個feature分支,

相關文章
相關標籤/搜索