一般合併分支時,可能Git會用Fast forward
模式,但這種模式下,刪除分支後,會丟掉分支信息。git
若是要強制禁用Fast forward
模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就能夠看出分支信息。學習
下面咱們實戰一下--no-ff
方式的git merge
:.net
首先,仍然建立並切換dev
分支:code
lwenhaodeMacBook-Pro:TestGit lwenhao$ git checkout -b dev Switched to a new branch 'dev' lwenhaodeMacBook-Pro:TestGit lwenhao$
修改README.md
文件blog
lwenhaodeMacBook-Pro:TestGit lwenhao$ cat README.md # TestGit 建立一個"dev"分支,我來操做。 學習分支管理策略。 lwenhaodeMacBook-Pro:TestGit lwenhao$
而且提交:開發
lwenhaodeMacBook-Pro:TestGit lwenhao$ git add README.md lwenhaodeMacBook-Pro:TestGit lwenhao$ git commit -m "add 學習" [dev 8faa495] add 學習 1 file changed, 2 insertions(+) lwenhaodeMacBook-Pro:TestGit lwenhao$
如今切換回master
:get
lwenhaodeMacBook-Pro:TestGit lwenhao$ git checkout master Switched to branch 'master' Your branch is ahead of 'origin/master' by 4 commits. (use "git push" to publish your local commits) lwenhaodeMacBook-Pro:TestGit lwenhao$
準備合併dev
分支,請注意--no-ff
參數,表示禁用Fast forward
:it
lwenhaodeMacBook-Pro:TestGit lwenhao$ git merge --no-ff -m "merge with no-ff" dev Merge made by the 'recursive' strategy. README.md | 2 ++ 1 file changed, 2 insertions(+) lwenhaodeMacBook-Pro:TestGit lwenhao$
由於本次合併要建立一個新的commit,因此加上-m
參數,把commit描述寫進去。io
合併後,咱們用git log
看看分支歷史:ast
lwenhaodeMacBook-Pro:TestGit lwenhao$ git log --graph --pretty=oneline --abbrev-commit * afd1966 (HEAD -> master) merge with no-ff |\ | * 8faa495 (dev) add 學習 |/ * 615c264 conflict fixed |\ | * 8b01682 update readme.md * | 426ee67 add 我要提交 |/ * fca856d branch test * 38e1bd3 (origin/master, origin/HEAD) Initial commit lwenhaodeMacBook-Pro:TestGit lwenhao$
在實際開發中,咱們應該按照幾個基本原則進行分支管理:
首先,master
分支應該是很是穩定的,也就是僅用來發布新版本,平時不能在上面幹活;
那在哪幹活呢?幹活都在dev
分支上,也就是說,dev
分支是不穩定的,到某個時候,好比1.0版本發佈時,再把dev
分支合併到master
上,在master
分支發佈1.0版本;
你和你的小夥伴們每一個人都在dev
分支上幹活,每一個人都有本身的分支,時不時地往dev
分支上合併就能夠了。
因此,團隊合做的分支看起來就像這樣:
合併分支時,加上--no-ff
參數就能夠用普通模式合併,合併後的歷史有分支,能看出來曾經作過合併,而fast forward
合併就看不出來曾經作過合併。
繼續閱讀:06 分支管理 —— Bug分支