本章内容将介绍第二部分:本地仓储操作。为了加深对每个命令操作的理解,我们可以事先获取一个仓储边学边操作。这里首先 你要明白一个概念,所有本地工作目录下的文件状态无不在乎两种,已跟踪和未跟踪。已跟踪文件表明在上一次 它就以及被纳入版本控制了,在暂存区已经留有它的快照,工作一段时间之后,它的状态可能处于已修改,未更新或者已放入暂存区,而其它所有文件都处于未跟踪状态,它们既没上一次更新时的快照也没有存在当前的暂存区。接下来我将依次列举出本地仓储常用的操作命令。

1.检查当前文件状态

每每工作一段时间之后,有时处理的文件过多,为了防止提交时有所遗漏,我们可以使用 git status 命令,用来查看当前工作目录下文件的状态,反馈的信息中会依次罗列出  1>.Untracked files:那些文件还未跟踪  2>.Changes to be committed:那些已经被记录在暂存区需要提交到本地仓储了  3>.Changed but not updated:那些之前已经被纳入版本控制的文件修改后需要从新纳入暂存区留下快照记录,当前的分支等等信息。

2.跟踪新文件和暂存已修改的文件

对于后期工作新添加的文件 我们需要对它进行控制,这时候我们就可以用 git add 文件名 或者 git add . 命令,前者表示纳入指定文件到版本控制,后者表示纳入当前目录下所有需要新增的文件。纳入之后,我们再使用 git status 命令,就会发现此时候这些文件的状态都处于 Changes to be committed -已暂存(待提交)。这时候如果我们接着对已暂存的某个文件操作后,再查看文件状态的时候,会发现该文件的状态变成了Changed but not updated-待更新到暂存区。那么这时候,git add 命令 又再派上用场了,需要用它来将该文件添加到暂存区。所以说文件处在不同的状态下使用 git add 命令,效果是不一样的

3.忽略某些文件

在工作过程中,我们会经常使用各种编辑器操作文件或者引入一些其它的临时资源,使用之后会经常产出一些垃圾文件,我们并不希望它们被纳入版本管理,我们希望告诉git每次我们提交的过程中需要忽略掉这些文件,那么这时我们就可以创建一个 .gitignore 文件,里面列举出我们需要忽略的文件格式。对于这个文件,我们一开始在创建版本库的时候 官方 会提示建议我们 创建该文件,细心的你或许已经发现了。至于该文件中列举的忽略文件的模式,我们可以看一个例子:

1

$ cat .gitignore *.[oa] *~

第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的,我们用不着跟踪它们的版本。第二行告诉 Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。要养成一开始就设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。

文件 .gitignore 的格式规范如下:

● 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。

● 可以使用标准的 glob 模式匹配。 * 匹配模式最后跟反斜杠(/)说明要忽略的是目录。 * 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0-9] 表示匹配所有 0 到 9 的数字)。

我们再看一个 .gitignore 文件的例子:

1

2

3

4

5

6

# 此为注释 – 将被 Git 忽略

*.a       # 忽略所有 .a 结尾的文件

!lib.a    # 但 lib.a 除外

/TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO

build/    # 忽略 build/ 目录下的所有文件

doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

4.查看已暂存和未暂存未更新信息

在工作一段时间之后,有时你需要回头查看下历史操作记录来进行相关的后续开发操作。这时候你就需要使用到 git diff 或者 git diff --cached 命令了。当我们对一个已暂存的文件修改之后还没提交,这个文件所处的状态我们已经知道了,这时候 我们使用 git diff 命令,我们发现反馈的信息列举出文件所修改的内容,当我们提交了这个文件之后,再使用git diff 会发现没有任何信息 ,而使用 git diff --cached 命令却又有信息反馈了,这是为什么呢。原因就是因为 git diff 这个命令 是将 该文件在未修改之前也就是处在暂存区状态下的内容和现修改之后 变动的内容。而git diff --cached 这个命令 是将 该文件 当前的最新的在暂存区的存储 版本和之前上一次的存储版本 内容进行比较。

5.提交更新

伴随着工作的进展,我们已经确保了所有需要的文件都已经提交了(都处在已暂存状态),那么这时候 就需要使用 git commit 命令 将这些文件全部提交到本地仓储了,近而推送到远程仓储(后续详细)。工作中 有时你会发现提交一个文件的 操作 步骤还是蛮多的,能不能简化些呢,很开心的告诉你 git早已经给你准备好啦,git commit -a 命令就直接跳过的add名,直接将需要添加的内容一次性的全给提交到本地仓储了,是不是感觉很爽,告诉你更嗨皮的 后面还有更爽的呢。

6.撤销操作、移除和修改文件

工作中难免会碰到 提交遗漏或者提交错误 等等不开心的事,很后悔 很希望能重新来过,怎么办呢? 别担心。既然你选择了git ,git就一定不会让你失望滴,无尽的后悔药,让你放心大胆的去操作。当我们需要修改最近的依次提交时,我们可以使用 git commit --amend 命令。此命令将使用当前的暂存区域快照提交。如果刚才提交完没有作任何改动,直接运行此命令的话,相当于有机会重新编辑提交说明,但将要提交的文件快照和之前的一样。启动文本编辑器后,会看到上次提交时的说明,编辑它确认没问题后保存退出,就会使用新的提交说明覆盖刚才失误的提交。如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 --amend 提交: $ git add forgotten_file    $ git commit --amend。上面的两条命令最终只是产生一个提交,第一个提交命令修正了第一个的提交内容。

有时候我们希望对某些文件分批次提交,但不小心全给添加到暂存区了,这时候就很需要撤销不该添加的文件,很着急的赶脚。别当心,git同样考虑到了,这是我们就可以使用 git reset HEAD [文件名]的方式取消暂存啦。如果你突然感觉这个文件修改的有问题 不想要了,想撤回到期原本的状态,咱办呢?没关系 git一样可以解决, 使用 git checkout [文件名]就可以还原到文件修改前的状态啦,是不是赶脚很酷。总有那么个时候,我们不想要某个文件了,要将他彻底的删除,那么这种情况下就要注意两点了,如果你使用 rm [文件名] 命令,这只能在本地工作目录下删除该文件,可它依旧留在暂存区哦,这是你查看文件状态,你就会发现给文件状态变成已修改待更新了哦。所以 你要想彻底的删除,那接着使用 git  rm [文件名]命令,这再将文件从暂存区彻底的删除了,接着提交本地仓储,也接着将更新推送到远程仓储,这样一样在本地仓储和远程仓储都将失去了这个文件了。另外的一点就是 当我们需要修改某个文件比如重命名,可以使用 git mv [旧名字][新名字]搞定啦。

7.查看提交历史

一个优秀的项目必然有着详细的版本管理,后期的扩张 这些详细历史记录 可是灰常有用哦。所以这种情况下 我们 经常需要 查询版本的详细的记录,以及在协同开发工作中 组员每次的提交修改更新记录,git 因此提供了一个很有必要的工具gitk。使用命令 git gitk 接着就会弹出一个操作界面-gitk。里面罗列出该项目的所有分支及其发展变化以及对应的操作记录。同时git还提供的 git log 命令一样的用来查看之前的操作记录,罗列顺序由晚及早。若果你觉得反馈的日志太复杂太多了 你也可以定制化 log的输出数量以及格式,这里就不多说了,以后有时间会整理出来。

看到这里呢,那么整片内容也就产不多讲完啦,相信你也能够 开始上手Git了。嘎嘎!另外呢,还是那句话,有看到哪里说的不正确的后遗留还望大家及时提出哈!共同进步!

Git基础(二)的更多相关文章

  1. GIT之二 基础篇(1)

    GIT基础 取得项目的 Git 仓库 有两种取得 Git 项目仓库的方法.第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库.第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来. 在 ...

  2. Git详解之二 Git基础

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

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

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

  4. Git基础教程(二)

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

  5. Git详解之二:Git基础

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

  6. Git 学习之Git 基础(二)

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

  7. Git详解之二 Git基础 转

    http://www.open-open.com/lib/view/open1328069733264.html Git 基础 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 ...

  8. Git 学习(二)Git 基础

    Git 基础 Git 在保存和对待各种信息的时候与其它版本控制系统如 SVN 等等有很大差异,尽管操作起来的命令形式非常相近,理解这些差异将有助于防止你使用中的困惑. Git 记录的是什么? 如果有使 ...

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

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

随机推荐

  1. CRC16校验

    C++中的代码如下:传入字节(byte)数组引用和数组长度 unsigned short CTcpClient::Crc16(const char *pBuf, unsigned short nLen ...

  2. extjs4与ckeditor、ckfinder整合

    <script type="text/javascript"src="<?php echo Yii::app()->request->baseUr ...

  3. HDU1048The Hardest Problem Ever

    The Hardest Problem Ever Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & ...

  4. 新浪微博之XSS蠕虫脚本源码讲解

    主要是因为新浪的广场页面有几个链接对输入参数过滤不严导致的反射性XSS.======================================== 微博XSS漏洞点 weibo.com/pub/ ...

  5. ios 聊天demo 和nsoperationdemo

    http://blog.csdn.net/zhibudefeng/article/details/7991649 http://blog.csdn.net/kangx6/article/details ...

  6. Yarn的服务库和事件库使用方法

    事件类型定义: package org.apache.hadoop.event; public enum JobEventType { JOB_KILL, JOB_INIT, JOB_START } ...

  7. 定时器 corn 表达式

    一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素.按顺序依次为1.秒(0~59)2.分钟(0~59)3.小时(0~23)4.天(月)(0~31,但是你需要考虑你月的天数)5.月(0~11 ...

  8. racle 11g impdp时 报ORA-12899

    racle 11g impdp时 报ORA-12899 (2012-07-16 16:42:12) 转载▼ 标签: oracle imp impdp it 分类: oracle技术-开发 源库ZHS1 ...

  9. 提高Python运行效率的六个窍门

    曾灵敏 - MAY 18, 2015 Python是一门优秀的语言,它能让你在短时间内通过极少量代码就能完成许多操作.不仅如此,它还轻松支持多任务处理,比如多进程. 不喜欢Python的人经常会吐嘈P ...

  10. D&F学数据结构系列——B树(B-树和B+树)介绍

    B树 定义:一棵B树T是具有如下性质的有根树: 1)每个节点X有以下域: a)n[x],当前存储在X节点中的关键字数, b)n[x]个关键字本身,以非降序存放,因此key1[x]<=key2[x ...