@(139 - Environment Settings | 环境配置)

一、Why?

分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。

现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

二、创建与合并分支

2.1 Why? - Git高效原因 - 指针操作

Git高效原因:指针操作

HEAD指向的就是当前分支。

Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!



原理图参考-廖雪峰git

2.2 分支操作代码

Git鼓励大量使用分支:

查看所有分支:git branch

创建分支:git branch <branch_name>

切换分支:git checkout <branch_name>

创建+切换分支git checkout -b <new_branch_name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

2.3 Demo

1.我们把dev分支的工作成果合并到master分支上:

$ git merge dev

Updating d17efd8..fec145a
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)

2.合并完成后,就可以放心地删除dev分支了:

$ git branch -d dev
Deleted branch dev (was fec145a).

3.删除后,查看branch,就只剩下master分支了:

$ git branch
* master

因为创建、合并和删除分支非常快,所以Git鼓励你



1.使用分支完成某个任务

2.合并后再删掉分支

这和直接在master分支上工作效果是一样的,但过程更安全。

三、解决冲突

P.S. Git Bash

1.查看文本内容 cat <name>

2.修改文件内容 vi <name>

3.vim 保存并退出 :wq

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

git log --graph命令可以看到分支合并图。

四、分支管理策略

4.1 默认 :fast forward模式

通常合并分支时,如果可能,Git会默认用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

不使用Fast forward模式,merge后就像这样:

4.2 实际分支策略

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
readme.txt | 1 +
1 file changed, 1 insertion(+)

在实际开发中,我们应该按照几个基本原则进行分支管理:

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

那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

所以,团队合作的分支看起来就像这样:

4.3 分支管理小结

Git分支十分强大,在团队开发中应该充分应用。

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

五、Bug分支

软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,

修复bug时,我们会通过创建新的临时 bug分支进行修复,然后合并,最后删除;

  1. 保存工作现场 :git stash
  2. 查看stash:git stash list
  3. 恢复现场Method1(stash内容并不删除)
$git stash apply
$git stash drop;删除

4.恢复现场Method2(恢复+删除):git stash pop

小结:

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

六、多人协作

6.1 推送分支

并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?

master分支是主分支,因此要时刻与远程同步;

dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!

6.2 多人协作的工作模式

1.首先,可以试图用git push origin branch-name推送自己的修改;

2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

3.如果合并有冲突,则解决冲突,并在本地提交;

4.没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

5.如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

6.3 多人协作小结

查看远程库信息,使用git remote -v

本地新建的分支如果不推送到远程,对其他人就是不可见的;

从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

139.00.005 Git学习-分支管理的更多相关文章

  1. 139.00.006 Git学习-标签管理Tag

    @(139 - Environment Settings | 环境配置) 一.Why 发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取 ...

  2. 139.00.003 Git学习-Git时光机之Inbox体系(三)

    一.Git时光机之Inbox 体系 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有G ...

  3. Git学习 -- 分支管理

    创建新分支,并切换到该分支 git checkout -b dev 这一句相当于以下两句: git branch dev 创建 git checkout dev 切换 查看当前分支 git branc ...

  4. 139.00.007 Git学习-Cheat Sheet

    @(139 - Environment Settings | 环境配置) Git虽然极其强大,命令繁多,但常用的就那么十来个,掌握好这十几个常用命令,你已经可以得心应手地使用Git了. 友情附赠国外网 ...

  5. 139.00.004 Git学习-远程仓库之Github

    参考Github官方HelloWorld入门教程 "有了远程仓库,妈妈再也不用担心我的硬盘了."--Git点读机 本章开始介绍Git的杀手级功能之一(注意是之一,也就是后面还有之二 ...

  6. Git的分支管理

    0.引言 本文参考最后的几篇文章,将git的分支管理整理如下.学习git的分支管理将可以版本进行灵活有效的控制. 1.如何建立与合并分支 1.1分支的新建与合并指令 新建分支 newBranch,并进 ...

  7. 你真的了解git的分支管理跟其他概念吗?

    现在前端要学的只是太多了,你是不是有时会有这个想法,如果我有两个大脑.一个学Vue,一个学React,然后到最后把两个大脑学的知识再合并在一起,这样就能省时间了. 哈哈,这个好像不能实现.现实点吧!年 ...

  8. git的介绍、git的功能特性、git工作流程、git 过滤文件、git多分支管理、远程仓库、把路飞项目传到远程仓库(非空的)、ssh链接远程仓库,协同开发

    Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. [1] 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码 ...

  9. git的使用学习(五)git的分支管理

    分支管理 分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平 ...

随机推荐

  1. Quartz .net 禁止并行触发

    DisallowConcurrentExecution 禁用同步执行防止一个job 同一时间执行多次. [DisallowConcurrentExecution] public class Order ...

  2. npm run build报错 ,resolve is not defined

    今天在build项目的时候报: ReferenceError: resolve is not defined npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ...

  3. 安装Telerik JustMock插件后启动不成功

    1.打开Telerik JustMock Configuration 勾选所有框 2.到C:\Program Files (x86)\Progress\Telerik JustMock\Librari ...

  4. Java_方法的调用①及案例

    方法调用的语法格式: 类名.方法名称([参数列表]); 调用过程: 案例: class Method01{ /*练习1:使用方法完成,输出5遍HelloWorld 方法语法格式: [修饰符] 返回值类 ...

  5. cadence help文件库调出指令 :cdnshelp

    cadence help文件库调出指令 :cdnshelp 指令参数记录: Verilog 添加可编译文件后缀名 -vlog_ext +.h,.vh Verilog1995 添加可编译文件后缀名 -v ...

  6. selenium+Python(事件)

    1.操作测试对象前面讲到了不少知识都是定位元素,定位只是第一步,定位之后需要对这个元素进行操作.鼠标点击或者键盘输入,这要取决于我们定位的是按钮还输入框.一般来说,webdriver 中比较常用的操作 ...

  7. 查看修复HDFS中丢失的块

    检测缺失块 hdfs fsck -list-corruptfileblocks hdfs fsck / | egrep -v '^\.+$' | grep -v eplica 查看上面某一个文件的情况 ...

  8. LoadRunner使用

    LoadRunner使用 软件版本:12.53 build 1203 操作系统: Windows7 以下内容摘录自LoadRunner的官方帮助文档. 介绍 LoadRunner现在是HP公司的产品, ...

  9. Golang教程:并发介绍

    Go是并发语言,而不是并行语言.在讨论Go并发性之前,我们必须首先了解什么是并发,以及并发与并行的区别. 什么是并发 并发(concurrency)是指一次处理大量事情的能力.让我们用一个例子来说明. ...

  10. java POST 传值 加签 验证

    话不多说,代码如下 package com.syl.test_key; import lombok.extern.slf4j.Slf4j; import org.apache.commons.code ...