自学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并不是这样. 是用来操控一些电冰 ...
随机推荐
- poj 2796 Feel Good单调栈
Feel Good Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 20408 Accepted: 5632 Case T ...
- golang (5) ---工程管理
1. go mod 添加本地package依赖 go mod 作为golang新的版本管理工具,减少了对GOPATH的依赖. 但是对本地文件的依赖的时候,提示 build server: cannot ...
- 【JAVA-WEB】在url上追加sessionid
HttpSession session = request.getSession(); url = url+";jsessionid="+session.getId();
- solr集群的搭建教程和使用入门
1 什么是SolrCloud? SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud. 当一个系统的索引数据量少的时候 ...
- AutoMapper控件
1.下载AutoMapper控件. 2.定义类,实现Profile. 3.在定义类的构造方法中使用如下代码进行转换 // 1.匹配,o,t代表TDestination;s代表TSource,返回TDe ...
- PHP之mb_strstr使用
mb_strstr (PHP 5 >= 5.2.0, PHP 7) mb_strstr - Finds first occurrence of a string within another 查 ...
- Error处理:/bin/bash^M: 坏的解释器: 没有该文件或目录(bad interpreter: No such file or directory)
在Linux下编译运行脚本的时候出现”/bin/bash^M: 坏的解释器: 没有那个文件或目录(bad interpreter: No such file or directory)“这样的错误. ...
- 数据库分库分表(一)常见分布式主键ID生成策略
主键生成策略 系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,下面介绍一些常见的ID生成策略. Sequence ID UUID GUID COMB Snowflake 最开始的自增ID为了实 ...
- 通过POST请求上传文件
转自:https://blog.csdn.net/zhangge3663/article/details/81218488 理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交 ...
- js弹出遮层
<script> var docEle = function () { return document.getElementById(arguments[0]) || false; } f ...