1.Git分支管理

分支即是平行空间,假设你在为某个手机系统研发拍照功能,代码已经完成了80%,但如果将这不完整的代码直接提交到git仓库中,又有可能影响到其他人的工作,此时我们便可以在该软件的项目之上创建一个名叫“拍照功能”的分支,这种分支只会属于你自己,而其他人看不到,等代码编写完成后再与原来的项目主分支合并下即可,这样即能保证代码不丢失,又不影响其他人的工作。

 
说明: Git团队合作流程图

一般在实际的项目开发中,我们要尽量保证master分支是非常稳定的,仅用于发布新版本,平时不要随便直接修改里面的数据文件,而工作的时候则可以新建不同的工作分支,等到工作完成后在合并到master分支上面,所以团队的合作分支看起来会像上面图那样。

 
说明: Git分支示意图

生产代码提交方式

1.1创建本地分支

  首先创建本地dev分支

  1. [root@git-node1 demo]# git branch dev
  2. [root@git-node1 demo]# git branch //查看本地分支
  3. dev
  4. * master

1.2切换本地分支

  a、切换分支至刚建立dev分支

  1. [root@git-node1 demo]# git checkout dev
  2. 切换到分支 'dev'
  3. [root@git-node1 demo]# git branch
  4. * dev
  5. master

  b、切换分支发生冲突会导致无法切换对应分支,可使用-f强制切换

  1. [root@git-node1 demo]# git checkout -f master
  2. 切换到分支 'master'
  3. [root@git-node1 demo]# git branch
  4. dev
  5. * master

1.3合并本地分支

现在,我们想把linux的工作成果合并到master分支上了,则可以使用”git merge”命令来将指定的的分支与当前分支合并

 
git合并分之示意图

  a.切换到dev分支

  1. [root@git-node1 demo]# git checkout dev
  2. 切换到分支 'dev'

  b.添加内容至index.html,并提交

  1. [root@git-node1 demo]# echo "Create new branch dev" >> index.html
  2. [root@git-node1 demo]# git add index.html
  3. [root@git-node1 demo]# git commit -m "new branch dev"
  4. [dev 1bf25ef] new branch dev
  5. 1 file changed, 1 insertion(+)
  6. create mode 100644 index.html

  c.切回master分支,合并dev分支

  1. [root@git-node1 demo]# git checkout master
  2. 切换到分支 'master'
  3. [root@git-node1 demo]# git merge dev //master合并dev分支内容
  4. 更新 9573413..ead1936
  5. Fast-forward
  6. index.html | 1 +
  7. 1 files changed, 1 insertion(+)
  8. create mode 100644 index.html

1.4删除本地分支

  合并完成dev分支后,可以放心的删除。

  1. [root@git-node1 demo]# git branch -d dev
  2. 已删除分支 dev(曾为 ead1936)。
  3. [root@git-node1 demo]# git branch
  4. * master

1.5查看远程分支

  查看远程分支

  1. [root@git-node1 demo]# git branch -a
  2. * master
  3. remotes/origin/master

1.6解决分支冲突

但是Git并不能每次都为我们自动的合并分支,当遇到了内容冲突比较复杂的情况,则必须手工将差异内容处理点,比如这样的情况:

 
git分支冲突示意图

  a、创建linux分支并切换到linux分支

  1. [root@git-node1 demo]# git checkout -b linux
  2. 切换到一个新分支 'linux'

  b、添加1行内容,并推送到远程仓库

  1. [root@git-node1 demo]# echo "1.branch linux" > readme.txt
  2. [root@git-node1 demo]# git add readme.txt
  3. [root@git-node1 demo]# git commit -m "touch readme.txt"
  4. [linux 4580c3b] touch readme.txt
  5. 1 file changed, 1 insertion(+)
  6. create mode 100644 readme.txt
  7. [root@git-node1 demo]# git push origin linux //推送到远程仓库,创建并关联远程dev分支
  8. Counting objects: 4, done.
  9. Compressing objects: 100% (2/2), done.
  10. Writing objects: 100% (3/3), 294 bytes | 0 bytes/s, done.
  11. Total 3 (delta 0), reused 0 (delta 0)
  12. remote:
  13. remote: Create merge request for linux:
  14. remote: http://git-node1/root/git_demo/merge_requests/new?merge_request%5Bsource_branch%5D=linux
  15. remote:
  16. To git@git-node1:root/git_demo.git
  17. * [new branch] linux -> linux

  c、切换至master分支,添加readme.txt文件,并和linux分支相同位置,然后尝试合并

  1. [root@git-node1 demo]# echo "1.branch master" > readme.txt
  2. [root@git-node1 demo]# git merge linux
  3. 自动合并 readme.txt
  4. 冲突(添加/添加):合并冲突于 readme.txt
  5. 自动合并失败,修正冲突然后提交修正的结果。
  6. [root@git-node1 demo]# vim readme.txt //我们需要手动删除<<<,=======,>>>>
  7. <<<<<<< HEAD
  8. 1.branch master
  9. =======
  10. 1.branch linux
  11. >>>>>>> linux

  d、从新提交并添加至远程分支仓库

  1. [root@git-node1 demo]# git commit -m "merge branch linux readme.txt"
  2. [master 5f3f588] merge branch linux readme.txt
  3. [root@git-node1 demo]# git push origin master
  4. Counting objects: 7, done.
  5. Compressing objects: 100% (2/2), done.
  6. Writing objects: 100% (3/3), 339 bytes | 0 bytes/s, done.
  7. Total 3 (delta 0), reused 0 (delta 0)
  8. To git@git-node1:root/git_demo.git
  9. 4c7a145..5f3f588 master -> master

1.7删除远程分支

  a、删除如上已经被合并过的linux分支。

  1. [root@git-node1 demo]# git push origin --delete linux
  2. To git@git-node1:root/git_demo.git
  3. - [deleted] linux

  b、或者push推送一个空的分支到远程test分支进行删除

  1. [root@git-node1 demo]# git push origin :test
  2. To git@git-node1:root/git_demo.git
  3. - [deleted] dev

1.8Git分支小结

  Git鼓励大量使用分支,常见分支结构 
  dev分支 
  bug分支 
  新功能分支

    1. 命令 git branch //列出所有本地分支
    2. 命令git branch –r //列出所有远程分支
    3. 命令git branch –a //列出所有本地分支和远程分支
    4. 命令git branch [branch-name] //创建新分支
    5. 命令git checkout –b [branch-name] //创建新分支,并且切换到该分支
    6. 命令 git branch --track [branch] [remote-branch] //创建新分支,与指定的远程分支建立追踪关系
    7. 命令 git checkout [branch-name] //切换至指定分支
    8. 命令 git branch –set-upstream [branch] [remote-branch] //本地分支与远程分支建立追踪关系
    9. 命令 git merge [branch] //合并指定分支到当前分支
    10. 命令 git cherry-pick [commit] //选择一个commit,合并至当前分支
    11. 命令git branch –d [branch-name] //删除本地分支
    12. 命令git push origin --delete [branch-name] //删除远程分支
    13. 命令git branch –dr [remote/branch] //删除远程分支

Git系列五之分支管理的更多相关文章

  1. Git 最佳实践:分支管理

    5月份,为统一团队git分支管理规范,刚开始准备自己写,在网上搜了下,发现不少不错的git分支管理实践.最后我为团队选择了这个git分支管理实践 A successful Git branching ...

  2. GIT学习之路第五天 分支管理

    本文参考廖雪峰老师的博客进行总结,完整学习请转廖雪峰博客 5.1创建与合并分支 首先创建dev分支,然后切换dev分支 $git checkout -b dev(包含创建并切换) 等价于<-&g ...

  3. git 入门教程之分支管理

    背景 什么是分支?简单地说,分支就是两个相对独立的时间线,正常情况下,独立的时间线永远不会有交集,彼此不知道对方的存在,只有特定情况下,两条时间线才会相遇,因为相遇,所以相知,因为相知,所以改变! 正 ...

  4. git入门五(分支合并冲突和衍合)

    分支合并冲突的处理   合并分支的冲突时在不同的分支中修改了同一个文件的同一部分,程序无法把两份有差异的文件合并,这时候需要人为的干预解决冲突.当前处于master 分支,当dev 分支和master ...

  5. git学习4:分支管理

    每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,这个分支叫主分支,即master分支,HEAD指向master,master指向提交,所以,HEAD指向的就 ...

  6. 【Git】笔记4 分支管理1

    1.创建与合并分支 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点: 每次提交,master分支都会向 ...

  7. Git&Github基本操作与分支管理

    Git的原理涉及快照流.链表.指针等,这里不作过多叙述. 1.基本操作 git init 创建一个 Git 仓库 git clone [url] 拷贝一个 Git 仓库到本地 git add [fil ...

  8. Git 基础教程 之 分支管理及策略

    创建一个属于自己的分支,别人看不到,你在你自己的分支上干活, 想提交就提交,直至开发完毕后,再一次性合并到原来分支上.这样,既安全,又不影响他人工作.          在实际的开发过程中,应照几个基 ...

  9. 【Git】六、分支管理&冲突解决

    上一节讲了如何和远端的仓库协同工作,这一节介绍一下分支 ---------------------------- 提要 //创建一个分支dev $ git branch dev //切换到dev分支 ...

随机推荐

  1. Django Model笔记

    常用数据类型 # https://docs.djangoproject.com/en/1.8/ref/models/fields/#field-types BooleanField:布尔类型true/ ...

  2. HDU 2993 MAX Average Problem(斜率DP经典+输入输出外挂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2993 题目大意:给出n,k,给定一个长度为n的序列,从其中找连续的长度大于等于k的子序列使得子序列中的 ...

  3. 深入理解python多进程编程

    1.python多进程编程背景 python中的多进程最大的好处就是充分利用多核cpu的资源,不像python中的多线程,受制于GIL的限制,从而只能进行cpu分配,在python的多进程中,适合于所 ...

  4. 深度学习方法:受限玻尔兹曼机RBM(一)基本概念

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 最近在复习经典机器学习算法的同 ...

  5. img加载不出来,给个默认图片。

    忽然发现,jq里也有坑,很多东西莫名其妙的被废弃了……所以,只能用原生js来做了: $('img').each(function() { if (!this.complete || typeof th ...

  6. js表单提交回调函数

    在研究表单的时候发现一个有意思的东西——在表单提交的时候如何保证数据全部提交完毕才会清空? 我们常用的<input type="reset" value="重置&q ...

  7. Oracle 数据库分页查询的三种方法

    一.Oracle 数据库分页查询的三种方法 1.简介 不能对 rownum 使用 >(大于或等于 1 的数值).>=(大于 1 的数值).=(不等于 1 的数值),否则无结果.所以直接用 ...

  8. VS2013 打开项目时提示This project is incompatible with the current edition Visual Studio.

    刚安装完成了Visual Studio 2013后,打开项目时,遇到以下问题 解决方法:在Visual Studio 2013 的菜单中打开“Tools",并打开“Extensions an ...

  9. 如何学习Docker

    如何学习Docker 学习Docker,如果没有云计算的基本知识,以及内核的基本知识,那么学习并理解起来会稍吃力.作为容器,Docker容器的优势在哪,不足在哪,最好了解容器的实现是怎样的(简单了解) ...

  10. 转:fortios 5.4后门植入

    提示: 1.经过实验,fortios 5.4 beta4也是可以的. 2.在实验时,选择先下载fortios 5.2(做了快照),再升级5.4,则虚拟机挂载需要选择FortiGate-VM-disk1 ...