Git+GitHub,构建自己的开源仓库之Git分支
来源:互联网 发布:尚学堂java培训 编辑:程序博客网 时间:2024/05/04 23:48
简介
最近公司里还是没什么事做,虽然工资还是在正常发,但是还是要有忧患意识,毕竟,生于忧患,死于安乐。所以,最近一段时间都处于学习状态,越学习越发现要学的东西太多,越学习越发现自己懂得少。言归正传,今天记录一下Git分支的相关知识。
Git分支命令
上表中列出了git分支操作的基本命令,还有一些高级用法,以及一些配合使用的其他命令,如git log –graph –pretty=oneline –abbrev-commit,下面就逐条来解读这些命令。
我们在操作这些命令的时候,都要注意一些,要明白自己当前在哪个分支操作,要对哪个分支产生效果。我们在创建完一个本地仓库后,会自动创建一个主分支,即master分支,在未进行任何分支操作之前,我们都是在master主分支上操作的。
创建分支
创建一个develop分支:
git branch develop
- 为什么要创建分支?
不影响主线分支的情况下开展工作,协同团队其他成员共同开发。
- SVN等其他版本控制系统也有分支功能,为什么都没怎么用过?
创建/切换/删除分支的成本太高,太慢,没法愉快的玩耍,于是就成了摆设,而Git则不同,创建切换分支都是秒级完成,根本感受不到。因此Git推荐开发者多多的使用分支功能。
创建完一个分支后,Git就会生成一个指针develop,指向的是当前commit节点的提交,另一个分支master也有一个指针master指向当前commit节点的提交。当我们在develop分支上提交新的内容后,develop指针就会指向这个提交,而master指针依然指向原来的提交。
查看本地分支
git branch
这条命令会列出本地已创建的分支,并且会在分支名字前面用星号*标记当前所在的分支:
chengshengyang@csy-pc MINGW64 ~/test (master)$ git branch develop* master
查看远程分支
git branch -r
列举远程仓库的分支
$ git branch -r origin/HEAD -> origin/master origin/master
可以看到远程仓库只有一个分支,本地的develop还没有push到远程仓库,指针HEAD指向的是master分支。
切换分支
git checkout develop
切换到develop分支
$ git checkout developSwitched to branch 'develop'
切换分支其实是Git将HEAD指针做了修改,指向了develop,所以这个过程很快。
创建并切换分支
其实就是创建切换二合一的命令,可以快速的切换到新的分支
git checkout -b releasechengshengyang@csy-pc MINGW64 ~/test (develop)$ git checkout -b releaseSwitched to a new branch 'release'chengshengyang@csy-pc MINGW64 ~/test (release)
直接从develop分支切换到了新建的release分支了,一步到位。
合并分支
git merge develop
此时,我们在develop上的工作完成了,需要合并到master分支,准备发布用。先切换到master分支:
git checkout master
开始合并:
git merge develop
这之前,我们在develop分支对b.txt文件做了修改:
$ cat b.txt000000000000000000000000001111111111111111111111111112222222222222222323333333333chengshengyang@csy-pc MINGW64 ~/test (develop)$ vim b.txtchengshengyang@csy-pc MINGW64 ~/test (develop)$ cat b.txt000000000000000000000000001111111111111111111111111112222222222222222323333333333git create branch is fast.
提交修改:
chengshengyang@csy-pc MINGW64 ~/test (develop)$ git add b.txtchengshengyang@csy-pc MINGW64 ~/test (develop)$ git commit -m "modify b.txt"[develop eb926ac] modify b.txt1 file changed, 2 insertions(+), 1 deletion(-)
切换到master分支后,同样,也修改一下b.txt文件的最后一行:
chengshengyang@csy-pc MINGW64 ~/test (master)$ cat b.txt000000000000000000000000001111111111111111111111111112222222222222222323333333333chengshengyang@csy-pc MINGW64 ~/test (master)$ vim b.txtchengshengyang@csy-pc MINGW64 ~/test (master)$ cat b.txt000000000000000000000000001111111111111111111111111112222222222222222323333333333git merge branch is fast.chengshengyang@csy-pc MINGW64 ~/test (master)$ git add b.txtchengshengyang@csy-pc MINGW64 ~/test (master)$ git commit -m "modify b.txt master"[master 9e2050b] modify b.txt master1 file changed, 2 insertions(+), 1 deletion(-)
现在master分支和develop分支都修改了b.txt的同一个位置,现在合并develop分支到master分支肯定会冲突:
chengshengyang@csy-pc MINGW64 ~/test (master)$ git merge developAuto-merging b.txtCONFLICT (content): Merge conflict in b.txtAutomatic merge failed; fix conflicts and then commit the result.
现在看看b.txt被合并成什么样子了:
$ cat b.txt000000000000000000000000001111111111111111111111111112222222222222222323333333333<<<<<<< HEADgit merge branch is fast.=======git create branch is fast.>>>>>>> develop
跟其他版本控制系统类似,会用<<<<<<<<、========、>>>>>>>>来划分冲突的内容。因为Git不知道master分支和develop分支哪个提交的内容是正确的,需要程序员手动修改后提交,注意我们此时所处的分支状态是这样的:
chengshengyang@csy-pc MINGW64 ~/test (master|MERGING)
(master|MERGING)状态,说明在主分支master进行合并的状态,合并未完成。解决冲突后提交:
$ cat b.txt000000000000000000000000001111111111111111111111111112222222222222222323333333333Dgit merge branch is fast.git create branch is also fast.chengshengyang@csy-pc MINGW64 ~/test (master|MERGING)$ git commit -m "merge develop"U b.txterror: commit is not possible because you have unmerged files.hint: Fix them up in the work tree, and then use 'git add/rm <file>'hint: as appropriate to mark resolution and make a commit.fatal: Exiting because of an unresolved conflict.chengshengyang@csy-pc MINGW64 ~/test (master|MERGING)$ git add b.txtchengshengyang@csy-pc MINGW64 ~/test (master|MERGING)$ git statusOn branch masterYour branch is ahead of 'origin/master' by 1 commit. (use "git push" to publish your local commits)All conflicts fixed but you are still merging. (use "git commit" to conclude merge)Changes to be committed: modified: b.txtchengshengyang@csy-pc MINGW64 ~/test (master|MERGING)$ git commit -m "merge develop-fix conflict"[master abffc90] merge develop-fix conflict
这里我犯了个错,解决冲突后没有add就直接commit,于是有了上面的一个提交失败提示。
冲突解决后,文件需要执行add操作后才能commit,如果不清楚可以先用git status查看状态
查看分支合并记录
git log --graph --pretty=oneline --abbrev-commit
这条命令是说用线条的形式显示分支的合并记录:
chengshengyang@csy-pc MINGW64 ~/test (master)$ git log --graph --pretty=oneline --abbrev-commit* abffc90 merge develop-fix conflict|\| * eb926ac modify b.txt* | 9e2050b modify b.txt master|/* 7bbd5fc add 19.png for jianshu.io
这条命令比较长,不好记,可以给它设置一个简单的别名,但是这里暂时不说如何设置,还是多写写这些命令,等记住了,熟练了再设置个别名,提高效率顺便装装逼啥的。
上面的合并方式是普通模式,已经很快了,但是有种模式叫“快进模式”,即Fast Forward,更快。一般合并没有冲突的时候,Git都会使用Fast Forward模式快速合并,这种合并模式也是修改指针,所以快。但是,使用Fast Forward模式合并后,如果删除合并的分支,使用上面的命令git log –graph –pretty=oneline –abbrev-commit就看不到分支的信息了,如果要避免这种情况,要使用下面的命令来合并:
git merge --no-ff -m "commit description" fix-bg-001
参数”–no-ff”指定合并不使用快进模式,使用普通模式。
删除分支
如果你现在在一个bug分支上解决一个bug,然后去develop分支、master分支合并成功了,这个分支也就没什么用了,可以删掉了:
chengshengyang@csy-pc MINGW64 ~/test (master)$ git branch -d fix-bug-001Deleted branch fix-bug-001 (was 0309fed).
如果分支内容还没有合并就要删除,会提示错误信息:
$ git branch -d testerror: The branch 'test' is not fully merged.If you are sure you want to delete it, run 'git branch -D test'.
而且提示了可以使用
git branch -D test
来强制删除:
$ git branch -D testDeleted branch test (was 92b398f).
以上就是git分支的一些基本命令的解读了,学会了这些基本操作,才能更好的理解分支管理的策略。
分支管理策略
其实说到分支管理策略,我本人也没有什么值得借鉴的经验,所以,这里就做了点功课,看看别人是怎么做分支管理的。
一般企业中开发一个项目的分支策略:
- 主分支 master
Git主分支的名字,默认叫做master。它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发。所有提供给用户使用的正式版本,都在这个主分支上发布。
master分支要时刻与远程同步,一般我们发布最新版本就用master分支。
- 开发分支 develop
主分支只用来分布重大版本,日常开发应该在另一条分支上完成。开发用的分支叫做Develop。这个分支可以用来生成代码的最新代码版本。如果想正式对外发布,就在Master分支上,对Develop分支进行”合并”(merge)。
团队中所有人都在这个分支上开发,所以也需要与远程同步。
- 功能分支 feature
功能分支,它是为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop。功能分支的名字,可以采用feature-*的形式命名。
该分支是否需要推送到远程,要看是不是有几个人合作开发新功能,如果你是一个开发,就没有必要了。
- 预发布分支 release
预发布分支,它是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。预发布分支是从Develop分支上面 分出来的,预发布结束以后,必须合并进Develop和Master分支。它的命名,可以采用release-*的形式。
建议该分支推送到远程仓库。
- bug 分支 fixbug
bug分支,软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支。它的命名,可以采用fixbug-*的形式。
bug分支一般只在本地使用来修复bug,一般不需推送远程仓库中,修复合并后删除分支。
- 其它分支 other
根据具体情况具体对待。
以上是根据网上摘取的关于分支管理策略的一些内容,不一定适合每个人,仅供参考。
总结
对于分支的操作就写这么多,如果您还有什么想知道的,就自己去网上找找相关资料,留言给我也可。如果觉得我的文章对你有用,欢迎点赞。有不足之处欢迎留言指出,谢谢。
看完本文的你或许对前两篇内容也感兴趣
Git+GitHub,构建自己的开源仓库之Git命令
Git+GitHub,构建自己的开源仓库之初识Git
最后,分享一首歌曲:
Girl From Heavens
- Git+GitHub,构建自己的开源仓库之Git分支
- Git+GitHub,构建自己的开源仓库之Git分支
- Git+GitHub,构建自己的开源仓库之初识Git
- Git+GitHub,构建自己的开源仓库之Git命令
- Git+GitHub,构建自己的开源仓库之踩坑
- github 管理自己的git仓库常用的操作
- Git的远程仓库--GitHub
- git温习之----仓库与分支的理解
- git学习--GitHub远程仓库和分支管理
- GIT篇之如何删除github上的仓库?
- git clone远程仓库的分支
- 删除git远程仓库上面的分支
- 使用github之:Git分支管理策略
- Git之使用GitHub搭建远程仓库
- Git之使用GitHub搭建远程仓库
- Git之使用GitHub搭建远程仓库
- Git之使用GitHub搭建远程仓库
- Git与GitHub之本地仓库
- TCP客户、服务端程序示例
- spring 基本原理和示例学习
- Python 抓图
- 安卓学习笔记---扫描与生成二维码的实现
- DOM0,DOM2,DOM3事件处理方式区别
- Git+GitHub,构建自己的开源仓库之Git分支
- 阿里云服务器 二级域名单独绑定一个项目
- iOS实现微信网页进度条,WKWebview进度条的实现
- Windows多线程按顺序打印ABC
- 【慢速学数据结构】集合篇
- java多线程之生产者消费者经典问题
- tomcat启动后,浏览器访问进不了欢迎页面,并报以下错误
- 使用Maven配置Hibernate5
- 关于Detours/Minhook挂钩引擎的UnHook