Git管理分支

在实际开发中,我们应该按照价格基本原则进行分制管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
 
 
当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
 
那么从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交了一个修改后,dev指针往前移一步,而master的指针是不变的。
 
假如我们已经在dev上完成了工作,就可以把dev合并到master上,如何合并?
最简答的就是直接把master指向dev的当前提交,就完成了合并~
如图:
所以git的合并也很快,就改改指针,工作区内容不改变~
合并完成后,甚至可以删除dev分支,删除后,就只剩下一条master分支了!
 
实战:
创建dev分支,并切换至dev分支:
[root@VM-75-64 test]# ll
total 8
-rw-r--r-- 1 root root 9 May 15 11:41 readme.md
-rw-r--r-- 1 root root 7 May 15 11:41 test.txt
[root@VM-75-64 test]# pwd
/root/test
[root@VM-75-64 test]#
[root@VM-75-64 test]#
[root@VM-75-64 test]# git branch            #查看分支列表,* 所在的分支就是当前分支
* master
[root@VM-75-64 test]# git checkout -b dev    #相当于两步操作,git branch dev:创建分支;git checkout dev:切换分支
Switched to a new branch 'dev'
[root@VM-75-64 test]# git branch             # 成功切换至dev分支
* dev
  master
[root@VM-75-64 test]# ll                        #本地工作区的文件是不变的~
total 8
-rw-r--r-- 1 root root 9 May 15 11:41 readme.md
-rw-r--r-- 1 root root 7 May 15 11:41 test.txt
[root@VM-75-64 test]#
 
此时我们在dev分支上正常提交:
修改readme.md
添加一行:
[root@VM-75-64 test]# vim readme.md
Git test
Create a new branch is quick
[root@VM-75-64 test]# git add readme.md
[root@VM-75-64 test]# git commit -m 'branch test'
[dev 3501a30] branch test
1 files changed, 1 insertions(+), 0 deletions(-)
[root@VM-75-64 test]# git status
# On branch dev
nothing to commit (working directory clean)
[root@VM-75-64 test]#
 
好,提交成功~
此时dev的工作提交完成,我们切回master分支~
[root@VM-75-64 test]# git checkout master
Switched to branch 'master'
[root@VM-75-64 test]# git status
# On branch master
nothing to commit (working directory clean)
[root@VM-75-64 test]# git branch
  dev
* master
[root@VM-75-64 test]# ll
total 8
-rw-r--r-- 1 root root 9 May 15 14:42 readme.md
-rw-r--r-- 1 root root 7 May 15 11:41 test.txt
[root@VM-75-64 test]# cat readme.md                #切回master分支以后我们发现,readme.md还是原来的版本!
Git test
 
现在,我们把dev分支的成果合并到master分支上!
[root@VM-75-64 test]# git merge dev            #git merge ***:就是把***分支的代码合并到当前分支的指令。
Updating df4ceaf..3501a30
Fast-forward                            #这里git告诉我们,这次合并是快进模式,也即是直接把master的HEAD指向到dev上!
readme.md |    1 +                        #修改的目标文件
1 files changed, 1 insertions(+), 0 deletions(-)    #具体的修改情况
[root@VM-75-64 test]# cat readme.md
Git test
Create a new branch is quick                        #你会发现,dev的修改,已经合并到当前的master上了!
[root@VM-75-64 test]#
 
上面说到的快进模式,其实还有其他种的合并方式,后面在讲解。
合并完成后,我们就能放心的删除dev分支了~
[root@VM-75-64 test]# git branch
  dev
* master
[root@VM-75-64 test]# git branch -d dev
Deleted branch dev (was 3501a30).
[root@VM-75-64 test]# git branch
* master                                        #ok,这里只剩下master分支了!
 
好的,现在来看下除了fast forward模式的其他的模式:
我们知道 Fast forward 模式在删除掉分支之后,会丢掉分支的信息,如果要强制禁用Fast forward 模式,就要在合并的回收加一个参数: --no-ff方式的git merge
 
我们再重演下上面的步骤:
[root@VM-75-64 test]# git checkout -b dev
Switched to a new branch 'dev'
[root@VM-75-64 test]# vim readme.md
Git test
Create a new branch is quick
Create a new branch is quick and simple
Ok let us deploy it together
dev branch deploy
[root@VM-75-64 test]# git add readme.md
[root@VM-75-64 test]# git commit -m 'dev deploy'
[dev 762a637] dev deploy
1 files changed, 1 insertions(+), 0 deletions(-)
[root@VM-75-64 test]# git checkout master          #切回master主分支
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 10 commits.
[root@VM-75-64 test]# ll
total 8
-rw-r--r-- 1 root root 107 May 15 18:12 readme.md
-rw-r--r-- 1 root root   7 May 15 11:41 test.txt
[root@VM-75-64 test]# cat readme.md
Git test
Create a new branch is quick
Create a new branch is quick and simple
Ok let us deploy it together
[root@VM-75-64 test]# git merge --no-ff -m 'merge with --no-ff' dev            #这里使用了--no-ff参数,去把dev分支的代码合并到本地!
Merge made by recursive.                                                       #这里没有提示fast forward 模式了!
readme.md |    1 +
1 files changed, 1 insertions(+), 0 deletions(-)
[root@VM-75-64 test]# cat readme.md
Git test
Create a new branch is quick
Create a new branch is quick and simple
Ok let us deploy it together
dev branch deploy
[root@VM-75-64 test]# git log --graph --pretty=oneline --abbrev-commit
*   eec652d merge with --no-ff
|  
| * 762a637 dev deploy
|/  
 
这里可以看到分支合并的信息...
好的,这部分的内容也就到这里了!
注意 git merge 的时候,使用--no-ff参数,同时 -m 加上备注信息。
 
在这里,git鼓励用户大量使用分支,因为每一个分支都是master的一个缩影,在真实的企业环境中,大多也只是配置文件的不同,功能大多都是一样的!所以,这里多分支就相当于一个备份~
Git分支十分强大,在团队开发中应该充分应用。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史中会保留有分支记录,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
 
总结下指令:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
合并某分支到当前分支:git merge --no-ff -m '**' <name>
删除分支:git branch -d <name>(已经合并过的分支)
 
删除分支: git branch -D <name> (还没有合并到master的分支)
 
 以上,共勉!
 
 
原文地址:https://www.cnblogs.com/storyawine/p/13408403.html