自学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并不是这样. 是用来操控一些电冰 ...
随机推荐
- Access network
1 State transfering A•Mobility:开机-搜寻PLMN/CELL来发现自己在网络中的位置•Attach request•Auth request•Auth res ...
- Zynq-7000 FreeRTOS(一)系统移植配置
软件版本:VIvado HLx 2018.2 从FreeRTOS的官网中下载源代码: https://www.freertos.org/a00104.html 图:FreeRTOS的官网 上图中,点击 ...
- 四、OE 中添加对供应商名称的唯一限制
最初的思路是利用sql_constraints 来限制重复的供应商名称,但后来想到在OE中供应商.客户乃至员工都隶属于Partner,sql_constrainst实际上是通过限制partner来限制 ...
- [Xamarin.iOS] 如何引用Objective-c寫的Class Library (转帖)
這個範例是如何在Xamarin.ios中去使用一個我們自行在Xcode中開發的Objective-c Class Library. 主要會執行的步驟如下 1. 在Xcode 裡面去建立一個Class ...
- maevn HelloWorld 基本命令
总结: Mvn clean compile:编译主代码 Mvn clean test:执行测试代码 Mvn clean package:打包 Mvn clean install: 安装到本地仓库 执行 ...
- 第2章—装配Bean—通过XML装配Bean
通过XML装配Bean 尽管我们在生成Bean的过程中可以用到很多方法,但我们依然需要Spring的XML配置来完善更多的需求,下面就来介绍下XML装配Bean的过程是怎样的. 3.1创建XML配 ...
- pycharm使用github
pycharm使用github 绑定账号 File-settings 在搜索框输入git 会出现github,然后在旁边输入你github的用户名和密码,可以点击”test”测试一下,如果出现: Co ...
- FS及CacheFS类解读
Javac中有FSInfo与CacheFSInfo两个类,CacheFSInfo继承了FSInfo类,这两个类的主要功能就是通过map缓存Jar文件,核心代码如下: private Map<Fi ...
- Maven报错:maven-archetype-webapp:RELEASE from any of the configured repositories
今天学习maven,在控制台下新建maven项目没有问题,但是在STS(eclipse)下创建maven项目老是报错,郁闷死了: ----------------------------------- ...
- [Mysql 查询语句]——查询指定记录
#比较 等于; 大于; 小于; 小于或等于; 大于或等于; 不等于; 排除掉; #指定范围查询 BETWEEN IN ; ; #指定集合查询 IN ,); ,); 集合元素可以是字符串类型 selec ...