git使用教程五:分支管理

git使用教程五:分支管理

分支有什么用呢,比如说一个团队在开发一套程序,你准备开发一个新功能,比如说这个新功能完成了20%,这个时候如果你提交代码的话,因为是个不完整的代码,会影响到别人,导致别人无法干活了,如果等代码开发完在提交的话,会存在丢失每天进度的风险,现在有了分支就不用怕了,你可以创建一个专属于自己的分支,别人看不到,还在原来分支上干活,而你自己在新的分支上干活,想提交就提交,直到开发完成后,把自己的专属分支和原来的分支合并就可以了,这样既安全又不会影响别人工作,git分支创建,合并,切换,删除,都非常快,可以在1秒内完成,无论你的版本库有多么庞大,哪怕有1万个文件。

创建和合并分支

每提交一次,git都把它们串成一个时间线,这个时间线就是一个分支,我们通常只用到一个时间线,这个分支就是主分支,也就是master分支,严格来说HEAD指向的不是提交,而是指向master,master指向的才是提交,所以HEAD指向的就是当前分支。如果新建一个分支dev,让HEAD指向dev,master还指向原来的分支,那么从此工作区的修改和提交就针对dev分支了每修改提交一次,在div分支的时间线上增加一个节点,而原来的master分支还保持不变,如果我们在dev分支上完成工作了,只要将dev和master合并就行,合并最简单的方法是将master指向dev的当前提交,合并完成之后可以将dev分支删除,删除dev分支实际是将dev的指针删掉,删掉后,就剩下一条master主分支了。由此可见分支的建立,切换,合并,删除,都是针对指针的操作,因此速度是非常快的。

下面进行分支操作命令介绍:

  • 分支创建:git branch
  • 分支切换:git checkout
  • 分支创建并切换:git checkout -b
  • 分支合并:git merge
  • 分支查看:git branch
  • 分支删除:git branch -d

下面进行分支创建和合并:

lenovo@lenovo-PC MINGW64 /e/github (master)
$ git checkout -b dev
Switched to a new branch 'dev'
D   test.txt

lenovo@lenovo-PC MINGW64 /e/github (dev)
$

git checkout命令加上-b参数表示创建并切换,相当于git branch和git checkout两条命令:

lenovo@lenovo-PC MINGW64 /e/github (master)
$ git branch dev

lenovo@lenovo-PC MINGW64 /e/github (master)
$ git checkout dev
Switched to branch 'dev'
  D   test.txt

lenovo@lenovo-PC MINGW64 /e/github (dev)

查看分支:

$ git branch
* dev
  master

“*” 表示当前HEAD指向的分支

切换分支:

$ git checkout master
Switched to branch 'master'
D   test.txt
Your branch is up to date with 'origin/master'.
$ git branch
  dev
* master

合并分支:

$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
$ git merge dev
Updating 561ca86..cc24a39
Fast-forward
 readme.txt | 1 +
 test.txt   | 1 -
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 test.txt

合并分支命令git merge 是将指定分支合并到当前分支,这里的操作是首先使用git checkout master命令切换到master分支,再将指定的dev分支合并到master分支。

有时合并还会存在一些问题和冲突,比如:

新创建并创建到分支feat:

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

对readme.txt文件进行修改,最后一行添加feat,然后在feat分支上提交:

$ git add readme.txt
$ git commit -m "add feat"
[feat e2e5af6] add feat
 1 file changed, 1 insertion(+)

切换到master分支,对readme.txt文件进行修改,最后一行添加master,然后在master上提交:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
$ git add readme.txt
$ git commit -m "add master"
[master 5aa5ae0] add master
 1 file changed, 1 insertion(+)

然后将feat分支合并到master上:

$ git merge feat
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

没有合并成功,提示是readme.txt文件存在冲突,必须进行手动修改,可以查看readme.txt文件,

$ cat readme.txt
Git is a version control system.
Git is a free software append GPL.
add file if_for.py
add file LICENSE
midif files
aaaaaaa
1234
<<<<<<< HEAD
master
=======
feat
>>>>>>> feat

*Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,修改后保存如下:*

$ cat readme.txt
Git is a version control system.
Git is a free software append GPL.
add file if_for.py
add file LICENSE
midif files
aaaaaaa
1234
feat

修改后再提交,提交完成后再进行合并,显示成功。

$ git add readme.txt
$ git commit -m "master feat merge"
[master b84a738] master feat merge
$ git merge feat
Already up to date.

值得注意的是,通常我们使用的合并都是fast forward模式,即快速合并模式,也可以使用参数–no-ff模式进行合并,使用命令如下:

$ git merge --no-ff -m "merge with no-ff" feat
Already up to date.

使用命令git log --graph --pretty=oneline --abbrev-commit可以查看分支合并图,可以看到在no-ff模式下合并,合并时会形成一个新的commit。

$ git log --graph --pretty=oneline --abbrev-commit
*   b84a738 (HEAD -> master) master feat merge
|\
| * e2e5af6 (feat) add feat
* | 5aa5ae0 add master
|/
* cc24a39 (dev) add 1234
* 561ca86 (origin/master) add file test.txt
* b0e2922 add file git1/git1.log
* e1c4305 add dir git1
* 50bbda8 rm test.txt
* d6b3450 add file test.txt
* 09dd2d4 aaaaaa
* 9ba73aa dddd
* bf80d0d add midfi readme.txt
* 4757dea modif 'readme.txt' ,add file LICENSE
* 26d2b1f {readme.txt}
* b88de02 {readme.txt} {add file if_for}
* f63d6c1 add file hello.py
* 8ff01a6 add fun.py
* 457f80c append GPL
* 70e2010 wrote a readme file

在实际开发中,一般会按照以下几个基本原则来进行分支管理:

首先,master作为主分支,应该是比较稳定的,也就是仅用来发布新版本,平时不能在上面干活;

团队合作时,应该创建一个dev分支,,大家都在dev分支上干活,你和你的小伙伴有自己的分支,每个人时不时的往dev分支上合并就可以了,在某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本。所以团队合作起来想这样:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值