Git基础(二)
本章内容将介绍第二部分:本地仓储操作。为了加深对每个命令操作的理解,我们可以事先获取一个仓储边学边操作。这里首先 你要明白一个概念,所有本地工作目录下的文件状态无不在乎两种,已跟踪和未跟踪。已跟踪文件表明在上一次 它就以及被纳入版本控制了,在暂存区已经留有它的快照,工作一段时间之后,它的状态可能处于已修改,未更新或者已放入暂存区,而其它所有文件都处于未跟踪状态,它们既没上一次更新时的快照也没有存在当前的暂存区。接下来我将依次列举出本地仓储常用的操作命令。
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基础(二)的更多相关文章
- GIT之二 基础篇(1)
GIT基础 取得项目的 Git 仓库 有两种取得 Git 项目仓库的方法.第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库.第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来. 在 ...
- Git详解之二 Git基础
Git 基础 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置: ...
- 【git学习二】git基础之git管理本地项目
1.背景 git基础打算分两部分来说,一部分是对于本地项目的管理,第二部分是对于远程代码仓库的操作. git运行本地项目管理包含对于相关文件的追踪,暂存区的比較分析,提交,撤销等功能. ...
- Git基础教程(二)
继续上篇Git基础教程(一),在开篇之前,先回顾一下上篇中的基本命令. 配置命令:git config --global * 版本库初始化:git init 向版本库添加文件:git add * 提交 ...
- Git详解之二:Git基础
Git 基础 读完本章你就能上手使用 Git 了(伯乐在线注:如果你对Git还不了解,建议从本Git系列第一篇文章开始阅读).本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到 ...
- Git 学习之Git 基础(二)
Git 基础 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置: ...
- Git详解之二 Git基础 转
http://www.open-open.com/lib/view/open1328069733264.html Git 基础 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 ...
- Git 学习(二)Git 基础
Git 基础 Git 在保存和对待各种信息的时候与其它版本控制系统如 SVN 等等有很大差异,尽管操作起来的命令形式非常相近,理解这些差异将有助于防止你使用中的困惑. Git 记录的是什么? 如果有使 ...
- 《Pro Git》笔记2:Git基础操作
第二章 Git基础 Git基础包括:版本库的创建和获取,文件添加修改提交等基本操作,状态查询,远程版本库管理和同步,打标签. 1.取得项目的Git版本库 基于Git的工作流要以Git版本库为基础,即可 ...
随机推荐
- Ajax status状态详解
readyState属性包括五种可能的取值: 0: (未初始化)send方法还没有被调用1: (加载中)已调用了send方法,请求还在处理2: (已加载)send方法已完成,整个应答已接收3: (交互 ...
- Topcoder SRM 630div 2
A:不断的消除两个相邻的相等字符,简单题. 真心不习惯STL.. #include<iostream> #include <string> #include <vecto ...
- Sqli-labs less 28a
Less-28a 本关与28基本一致,只是过滤条件少了几个. http://127.0.0.1/sqllib/Less-28a/?id=100%27)unIon%0bsElect%0b1,@@base ...
- ECMAScript 5.1中对属性的操作
此操作只针对新版本浏览器. Object.defineProperty(obj,'name',{configurable:true/false,enumberable:true/false,value ...
- visual studio 2012 Github
前言 一直以来都想使用Git来管理自己平时积累的小代码,就是除了工作之外的代码了.有时候自己搞个小代码,在公司写了,就要通过U盘或者网盘等等一系列工具进行Copy,然后回家才能继续在原来的基础上作业. ...
- POJ 1953
//FINBONACI数列 #include <iostream> #define MAXN 100 using namespace std; int _m[MAXN]; int main ...
- 堆排序 Heap Sort
堆排序虽然叫heap sort,但是和内存上的那个heap并没有实际关系.算法上,堆排序一般使用数组的形式来实现,即binary heap. 我们可以将堆排序所使用的堆int[] heap视为一个完全 ...
- JavaScript. The core.
Read this article in: Japanese, German (version 2), Arabic, Russian, French, Chinese. An object A pr ...
- http://blog.csdn.net/woshiyjk/article/details/7895888
http://blog.csdn.net/woshiyjk/article/details/7895888
- java中静态代理跟动态代理之间的区别
文章转载于:http://www.cnblogs.com/xiaoluo501395377/p/3383130.html 在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另 ...