前言


Git是版本控制系统,由Linux开源社区开发。与其他的版本系统相比,Git更加快速,便捷。主要是Git存储的是快照,而非差异性比较。并且绝大数操作都是访问本地文件和资源,没有网络时也可以直接提交,等到有网时再推送到远程仓库。对于文件的历史也是直接拉取本地,瞬间完成。

背景


解决一下场景遇到的问题
业务:个人信息的需求。
Coder:码码码码码码。。。(进行中)
安全部门:怎么档案的信息改下id,能看到别人的档案,赶紧修复。
Coder:个人信息还没做好,档案修复和个人信息文件又存在交叉,不能提交,该怎么办?

文件状态变化周期



文件的状态只有两种:未跟踪(untracked)和已跟踪(unmodified、modified、staged)

1. 工作目录下创建new.php文件


执行 git status,可以发现new.php还没有被git跟踪

2. 跟踪new.php文件


执行git add . 后,文件被放入暂存区(staged)

3. 修改new.php的内容


git status 后,出现 Changes not staged for commit,说明跟踪的文件已被修改,还未放入在暂存区

4. 暂存修改的new.php


git add 是个多功能的命令,既可以将未跟踪的文件放入暂存区,也可以将修改的文件放入暂存区,当然它还有其他的一些功能。从上面的图我们可以看到,修改的文件被放入到暂存区了。

5. 提交,生成快照


git commit -m "add new" 后,已生成此次的快照,校验和为 dd90005
note : git commit -a -m ''add new", 可以跳过git add

6. 删除提交


git rm后,重新提交,文件在工作目录和暂存区中都被删除。

分支

git的原理由5个对象实现,想知道具体的可以搜下资料看看,这里主要讲如何解决背景出现的问题。
git log --oneline --decorate --graph --all //先执行此命令查看工作目录所处的分支

根据上图可以看到工作目录处于master分支,HEAD指向master分支,流程图:

1.个人信息需求

git branch issue //此时HEAD还是指向master
创建issue分支,这点很重要,当有新需求过来的时候,一定要创建自己的分支。保持主分支为原样。
git checkout issue //切换到issue分支,HEAD指向issue

流程图:

2. 码码码码码码

在issue分支下,工作,并提交到暂存区

可以看到生成了校验码为c7abbef的快照,流程图:

3. 档案信息修复

git checkout master //切换master主分支,HEAD指向master
git branch issue2 //创建issue2分支,HEAD指向master
git checkout issue2 //HEAD指向issue2
修复bug,同提交,产生3a59570快照。
此时流程图:

git checkout master //切换master分支
git merge issue2 //issue2分支的内容合并到master分支
流程图:

此时的合并只是将master指针前移。
git branch -d issue2 //删除issue2分支

4. 继续个人信息

git checkout issue //切换issue分支
码码码码码。。。。
功能实现继续提交
流程图:

git checkout master //切换到master主分支
git merge issue //合并issue分支到master主分支

此时的合并就不是简单的将master指针前移,因为这两个分支的共同分支是9ffb7ee,而不是3a59570,此次合并做了两次操作,一是将94517a9、9ffb7ee、3a59570的结果做了一次新的快照,二是对结果做了一次新的提交10af497。

注:此时如果有文件冲突,出现 CONFLICT (content): Merge conflict ,可以到冲突的文件中,修改冲突的内容,再次 git commit -a -m "fix confilct"

关于git的使用就讲到这了,上面讲的这些也只是git的基本使用。
当我们再去深入的了解的话,就会发现用git也可以实现运维系统发布那一套流程,每一个开发者将自己私有库的更新发布到自己的公共库上,再由管理者去拉取开发者的公共库更新,管理者发现没有问题,再推送到主仓库。

Git基础使用的更多相关文章

  1. [转] Git 基础 - 打标签

    2.6 Git 基础 - 打标签 打标签 同大多数 VCS 一样,Git 也可以对某一时间点上的版本打上标签.人们在发布某个软件版本(比如 v1.0 等等)的时候,经常这么做.本节我们一起来学习如何列 ...

  2. Git基础操作

    配置秘钥 1.检查本机有没有秘钥 检查~/.ssh看看是否有名为d_rsa.pub和id_dsa.pub的2个文件. $ ~/.sshbash: /c/Users/lenovo/.ssh: Is a ...

  3. git基础及分支

    关于版本控制 git是一种分布版本控制系统,每一主机都保存了完整副本.必杀技是分支. 在Windows可安装git客户端msysgit. git基础 第一次看progit觉得有点不懂,不懂版本控制,一 ...

  4. 《Pro Git》笔记2:Git基础操作

    第二章 Git基础 Git基础包括:版本库的创建和获取,文件添加修改提交等基本操作,状态查询,远程版本库管理和同步,打标签. 1.取得项目的Git版本库 基于Git的工作流要以Git版本库为基础,即可 ...

  5. Git详解之二 Git基础

    Git 基础 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置: ...

  6. 2.4 Git 基础 - 撤消操作

    2.4 Git 基础 - 撤消操作 撤消操作 任何时候,你都有可能需要撤消刚才所做的某些操作.接下来,我们会介绍一些基本的撤消操作相关的命令.请注意,有些撤销操作是不可逆的,所以请务必谨慎小心,一旦失 ...

  7. ###Git 基础图解、分支图解、全面教程、常用命令###

    一.Git 基础图解 转自:http://www.cnblogs.com/yaozhongxiao/p/3811130.html Git 图解剖析 git中文件内容并没有真正存储在索引(.git/in ...

  8. 【git学习二】git基础之git管理本地项目

    1.背景        git基础打算分两部分来说,一部分是对于本地项目的管理,第二部分是对于远程代码仓库的操作. git运行本地项目管理包含对于相关文件的追踪,暂存区的比較分析,提交,撤销等功能. ...

  9. Git基础教程(二)

    继续上篇Git基础教程(一),在开篇之前,先回顾一下上篇中的基本命令. 配置命令:git config --global * 版本库初始化:git init 向版本库添加文件:git add * 提交 ...

  10. Git详解之二:Git基础

    Git 基础 读完本章你就能上手使用 Git 了(伯乐在线注:如果你对Git还不了解,建议从本Git系列第一篇文章开始阅读).本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到 ...

随机推荐

  1. vim设置golang语法高亮 (Centos)

    Go语言自带vim 的语法高亮文件. http://www.golangtc.com/download 下载   go1.3.3.src.tar.gzgo1.3.3 (source only),解压缩 ...

  2. linux分析工具之lsof详解

    一.概述 在linux中,所有东西都是以文件的形式存在的,所以我们在linux上的操作都是通过对文件的操作来执行我们所需要的逻辑,比如我们对文件数据的访问,修改,访问网络的连接等,刚好lsof(lis ...

  3. 对BUG的分析与理解

    对BUG的分析与理解 bug的分类 bug,其实就是软件期望的行为与实际行为的差异.从程序的角度来看,在软件整个生命周期中都会有bug的出现.需求分析过程中,需求理解的不足,导致的理解错位 ,遗漏甚至 ...

  4. 未来实现API管理系统的几个关键词

    下面将通过几个关键词的形式说明API管理的重要性和未来的实现方式. 1.生命周期管理 在整个API生命周期中更深入地集成所有工具将进一步提高生命周期循环的速度,而且更重要的是提供满足消费者需求的API ...

  5. python编程基础之三十五

    系统的魔术方法:系统的魔术方法特别多,但是也都特别容易懂,简单的讲就是对系统的内置函数进行重写,你需要什么效果就重写成什么样, 比如说len()方法针对的对象本来没有自定义类的对象,但是当你重写了__ ...

  6. JVM之内存结构详解

    对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bug.同时,JVM也是面试环节的中重灾区.今天开始,<JVM详解>系列开启,带大家深入了解JVM相 ...

  7. win2008加入域控之尝试解析加入域中域控制器的dns名称失败解决办法

    记录下今天遇到以前没遇到的问题 加入域的时候提示“尝试解析加入域中控制器的DNS”名称失败 可能的原因: 如果确认dns没问题 dc正常访问,那可能就是因为域控制器无法向dns注册srv记录. SRV ...

  8. vc++中字符串的免杀

    一:格式字符: http://baike.baidu.com/view/2194593.htm d:以十进制形式输出带符号整数(正数不输出符号)o:以八进制形式输出无符号整数(不输出前缀o)x:以十六 ...

  9. opencv::直方图计算

    直方图概念 上述直方图概念是基于图像像素值,其实对图像梯度.每个像素的角度.等一切图像的属性值,我们都可以建立直方图.        这个才是直方图的概念真正意义,不过是基于图像像素灰度直方图是最常见 ...

  10. HDU 6112 今夕何夕 (预处理 枚举)

    中文题意都看的懂啦~ 思路很简单,就是通过前一天推出当天是星期几,直接枚举所有2017-9999年的每一天就好了.ㄟ( ▔, ▔ )ㄏ 代码: #include <cstdio> #def ...