自学git心得-3
转眼到第三节了,我们进入分支管理。
git领域里的分支可以理解为一个有安全保障的临时仓库,有时我们新修改了代码,突然发现有bug需要回到之前的版本,有时我们开发到一半,突然要出去一趟,如何安全保存当前代码成为了一
个痛点,这时候有个分支就ok了,我们每次修改代码都新建一个分支,在上面修改完了再与之前的版本合并,而原来的版本可以保存也可以合并,而中途有事也可以用stash命令进行保存。
接下来我们具体学习:
之前我们学过版本回退,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是
指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确
定当前分支,HEAD其实就可以理解成C里面的二级指针。每次提交,master分支都会向前移动一步,这样,随着我们不断提交,master分支的线也越来越长。当我们创建新的分支,例如dev时
,Git就新建一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。那么从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指
针往前移动一步,而master指针不变,这就实现了旧版本的保存,当我们完成dev上的工作并确定无误了,我们就可以将master与其合并,此时dev就完成了它的使命,我们可以删除它,于是我
们又只剩下master一个分支了。
值得一提的是,上述一切操作都是基于指针层面的,没有对文件进行修改,这是分支的一大亮点。(参考链接有详细的图解)
接下来具体上命令:
1.创建并切换至分支dev: git checkout -b dev
2.查看当前分支: git branch (会列出所有分支,当前分支前面会标一个*号)
3.在分支dev上修改并提交文件: git add readme.txt & git commit -m "branch test"
4.切换回master分支: git checkout master (注意此时打开readme.txt本地文件是看不到刚刚在dev上的修改的)
5.把dev上的工作结果合并到master上: git merge dev
6.删除dev分支: git branch -d dev
然而使用分支也不总是一帆风顺的,这里以合并分支时的冲突问题为例。
假设我们现在分别在master和feature1两个分支上都有了新的提交,就像这样:
(截图来自廖雪峰官方网站,下同)
显然现在master和feature1两个分支处于平行的关系,如果用命令git merge feature1合并二者则会发生冲突,打开readme.txt我们就可以看到了。
我们现在来解决冲突:
首先我们将readme.txt编辑成我们理想的样子,然后进行提交(注意是两步,先add后commit),于是现在的情况变成了这样:
(也可以用命令git log查看分支情况,只是bash上的图没有这个截图清晰)
最后我们删除feature1就OK了~
这是一种典型的手动解决冲突问题的情况,注意一定要解决好冲突问题再合并。
上述所有提到的合并其实都是一种强制快速合并(Fast forward),也就是说用master强制合并当前的dev分支,也就是说分支dev同时被删除了,你可能会说,master合并过来不也就和dev
一样的吗为什么不删掉dev呢,事实上,重要的不是dev所指的文件内容,而是它的分支信息,如何能做到保留它呢,我们用命令git merge --no-ff -m "merge with no-ff" dev 来合并dev就行
了,就像这样:

在团队工程中,每个人写完了自己的代码就会合并到团队工程中去,这种情况下,用保留当前分支的合并方法就显得十分重要了,假如之后发现了问题,你可以很轻松地回溯,查看bug的来源。
这一节内容有点太多了233,先歇会,下一节咱们从应用分支继续~
自学git心得-3的更多相关文章
- 自学git心得-2
趁着最近还没忙起来,抓紧更新一下学习心得. 现在的情景是,我们已经在本地创建了一个Git仓库,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备 ...
- 自学git心得-1
Github作为目前世界上最先进的分布式版本控制系统,是软工工作者管理工程代码的不二选择,笔者也是因时所需,自学了基本的git操作,在此回顾一下也作为分享. 推荐学习资源:https://www.li ...
- 自学git心得-5
标签管理也是git里面比较重要的一部分内容,我们下载软件的时候经常看到诸如v2.0.v2.3.0这样的版本号,在git里也是一样,有时为了避免分支的名称五花八门而发生混淆的情况,我们常常会 给分支贴上 ...
- 自学git心得-4
本节介绍分支的一些具体应用实例. 1.Bug分支 设想我们正在分支dev上工作,突然接到一个修复bug的命令,我们需要创建分支issue-101来修复它,在此之前我们肯定需要先保存我们当前未完成的工作 ...
- 第一次使用Git心得体会
用书本上的概念讲,Git是一个分布式的版本控制工具,每一个Git的工作目录都是一个完全独立的代码库,并拥有完整的历史记录和版本追踪能力,能够不依赖于网络和中心服务器.也就是说Git能够不需要服务器而在 ...
- git心得
使用Git得到了以下体会: github在新的目录下添加新的文件 git init //在相应的目录下添加 git add //添加目录 git commit -m "first commi ...
- git心得与总结
任何文件在Git库中都有四种状态:未跟踪状态untracked.跟踪状态tracked(未修改状态unmodified.已修改状态modified.暂存状态staged),由于文件的上述四种状态,在使 ...
- java自学入门心得体会 0.1
之前记录了java的简介和基本语法 这里记载下对象和类 不太懂的我理解java对象和类的概念很模糊,因为有了 Abstract修饰符 让对象与类更加的扑朔迷离 - - 所以,就像很开放的语言,创建对象 ...
- java自学入门心得体会 从环境配置开始
java —— 一种可以撰写跨平台应用软件的面向对象的程序设计语言. 很多教程里都要概述java语言的诞生发明.其实像图灵的”图灵机“和”图灵测试“一样,当初的java并不是这样. 是用来操控一些电冰 ...
随机推荐
- 编写一个算法,将非负的十进制整数转换为其他进制的数输出,10及其以上的数字从‘A’开始的字母表示
编写一个算法,将非负的十进制整数转换为其他进制的数输出,10及其以上的数字从‘A’开始的字母表示. 要求: 1) 采用顺序栈实现算法: 2)从键盘输入一个十进制的数,输出相应的八进制数和十六进制数. ...
- python 网络编程之socket开发和socketserver模块
一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...
- Javascript之in操作符的用法
in操作符是js里面常用的一个操作符,下面是其几个常用的功能: 1.配合for语句循环遍历/迭代数组中的元素 2.配合for语句循环遍历/迭代集合中的属性 3.判断对象是否是数组的元素 4.判断对象是 ...
- Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. 调用函数约定不同
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is ...
- ubuntu下安装h2数据库
1.下载h2数据库安装包 http://www.h2database.com/html/download.html 2.解压安装文件包到指定目录 3.运行sh文件 4.访问web地址: http:// ...
- 【数组】Subsets II
题目: Given a collection of integers that might contain duplicates, nums, return all possible subsets. ...
- PTA (Advanced Level) 1019 General Palindromic Number
General Palindromic Number A number that will be the same when it is written forwards or backwards i ...
- 费了个劲的git
终于学会了git,表示不容易,个人表示总结一下... 1.设置个人PC上的git master路径,ok没问题,用时1min 2.从码云代码仓库克隆已写代码,也很简单,用时2min 3.将本机器内文 ...
- Node.js的基础知识(一)
一.Buffer类 1.创建缓冲区的三种方式 var buffer = new Buffer(10); console.log(buffer); var buffer2 = new Buffer([1 ...
- Java工具:native2ascii ---得到中文对应的ASCII编码
如国际化中,要得到“提交”对应的ASCII编码: