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. 【Mac电脑】Jenkins的安装

    1.JDK自己下载安装喽, 2.下载Jenkins 下载路径:https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.121.1/jenki ...

  2. golang实现mysql数据库备份

    背景 navicat是mysql可视化工具中最棒的,但是,在处理视图的导入导出方面,它是按照视图名称的字母顺序来处理的,若视图存在依赖,在导入过程中就会报错.前面已经用python写了一个,但在使用过 ...

  3. 动态创建timer

    Private  timer:Ttimer;procedure MyTimerDo(Sender:Tobject);procedure create ;  timer:=TtIMER.Create;  ...

  4. Ubuntu 17.04 搭建LAMP服务器环境流程

    安装Apache2 安装代码 sudo apt-get install apache2 更改默认目录 sudo vim /etc/apache2/apache2.conf // 将 <Direc ...

  5. 洛谷P3197 HNOI2008 越狱

    题目传送门 实际上昨天大鸡哥已经讲过这题了,结果没记住,今天一道相似的题就挂了......吃一堑长一智啊. 思路大致是这样:如果直接算发生越狱的情况会比较复杂,所以可以用间接法,用安排的总方案-不会发 ...

  6. js中复制方法总结

    js中有深拷贝和浅拷贝两种复制形式,下面总结一下常用方法,方便平时工作复习使用 一.浅拷贝 1.json对象浅拷贝 var newObj = JSON.parse(JSON.stringify( so ...

  7. ARM开发板不工作的几个原因

    刚焊了5块ARM(LPC2478)的开发板,上程序测试了一下,发现只有一个板子工作其他四个全部歇菜.努力地找了一会最终发现是板子的来个电阻焊翻了.因为是1206 的封装而且来个电阻在PCB上摆放的位置 ...

  8. Quartz.NET 3.0.7 + MySql 动态调度作业+动态切换版本+多作业引用同一程序集不同版本+持久化+集群(四)

    把 HAProxy 用上了,终于不用担心某个节点挂了,还要去手动修改管理后台配置文件的api地址了. 在某网站下载了一个 window 可以用的版本 haproxy-1.7.8 不得不吐槽一下,作者要 ...

  9. 1.L 查询关键字 HEXLOC

    Take the compile listing for the program that has either OFFSET or LIST option selected. Use the OFF ...

  10. uva 10648(简单dp)

    Recently one of my friend Tarik became a member of the food committee of an ACM regional competition ...