git原理浅析及命令介绍

状态描写叙述

请记住,工作文件夹以下的全部文件都不外乎这两种状态:已跟踪或未跟踪。已跟踪的文件是指本来就被纳入版本号控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新。已改动或者已放入暂存区。而全部其它文件都属于未跟踪文件。

它们既没有上次更新时的快照,也不在当前的暂存区域。

初次克隆某个仓库时。工作文件夹中的全部文件都属于已跟踪文件。且状态为未改动。


在编辑过某些文件之后。Git 将这些文件标为已改动。

我们逐步把这些改动过的文件放到暂存区域,直到最后一次性提交全部这些暂存起来的文件。如此反复。



假设此时新加入一个文件,那么它并不在git监管之下,属于未追踪的。使用add能够将文件纳入到暂存之下。这时候使用git commit会将暂存之下的改动提交,这个时候即使有改动,可是没有git add过。那么commit之后。git也不会存在它的快照。所以。要想将文件改动加入到本地仓库中,须要先add,然后再commit。当然。这样有点繁琐,能够直接使用git commit -a命令将工作文件夹中的改动保存到本地仓库中。

一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出如今未跟踪文件列表。通常都是些自己主动生成的文件,比方日志文件,或者编译过程中创建的暂时文件等。

我们能够创建一个名为 .gitignore 的文件,列出要忽略的文件模式。


要查看尚未暂存的文件更新了哪些部分,不加參数直接输入 git diff。此命令比較的是工作文件夹中当前文件和暂存区域快照之间的差异,也就是改动之后还没有暂存起来的变化内容。若要看已经暂存起来的文件和上次提交时的快照之间的差异,能够用 git diff --cached 命令。

(Git 1.6.1 及更高版本号还同意使用 git diff --staged。效果是同样的,但更好记些。)

请注意。单单 git diff 只是是显示还没有暂存起来的修改。而不是这次工作和上次提交之间的差异。所以有时候你一下子暂存了全部更新过的文件后。执行 git diff 后却什么也没有。就是这个原因。

文件提交

git commit -m "Story 182: Fix benchmarks for speed"
能够提交暂存的改动。

git commit -a -m 'added new benchmarks'
上面的命令加了a參数,能够将工作文件夹中的改动直接提交,等同于跳过了add过程。

移除文件

要从 Git 中移除某个文件,就必需要从已跟踪文件清单中移除(确切地说。是从暂存区域移除)。然后提交。能够用 git rm 命令完毕此项工作,并连带从工作文件夹中删除指定的文件。这样以后就不会出如今未跟踪文件清单中了。

假设仅仅是简单地从工作文件夹中手工删除文件,执行 git status 时就会在 “Changes not staged for commit” 部分(也就是未暂存清单)看到。

然后再执行 git rm 记录此次移除文件的操作 git rm filename

假设删除之前改动过而且已经放到暂存区域的话。则必需要用强制删除选项 -f(译注:即 force 的首字母)。以防误删除文件后丢失改动的内容。

第二种情况是。我们想把文件从 Git 仓库中删除(亦即从暂存区域移除)。但仍然希望保留在当前工作文件夹中。换句话说。仅是从跟踪清单中删除。比方一些大型日志文件或者一堆 .a 编译文件,不小心纳入仓库后,要移除跟踪但不删除文件,以便稍后在 .gitignore 文件里补上。用 --cached 选项就可以

git rm --cached readme.txt
移动文件

要在 Git 中对文件改名。能够这么做:

git mv file_from file_to
事实上,执行 git mv 就相当于执行了以下三条命令:

mv README.txt README
git rm README.txt
git add README

查看提交历史

git log
git log 有很多选项能够帮助你搜寻感兴趣的提交,接下来我们介绍些最经常使用的。

git log -p -2
我们经常使用 -p 选项展开显示每次提交的内容差异。用 -2 则仅显示近期的两次更新.

某些时候,单词层面的对照,比行层面的对照,更加easy观察。Git 提供了 --word-diff 选项。我们能够将其加入到 git log -p 命令的后面,从而获取单词层面上的对照。在程序代码中进行单词层面的对照经常是没什么用的。只是当你须要在书籍、论文这样的非常大的文本文件上进行对照的时候。这个功能就显出用武之地了。

新添加的单词被 {+ +} 括起来。被删除的单词被 [- -] 括起来。在进行单词层面的对照的时候,你可能希望上下文( context )行数从默认的 3 行。减为 1 行。那么能够使用 -U1 选项。

还有个经常使用的 --pretty 选项,能够指定使用全然不同于默认格式的方式展示提交历史。

比方用 oneline 将每一个提交放在一行显示,这在提交数非常大时非常实用。


以上仅仅是简介了一些 git log 命令支持的选项。表 2-2 还列出了一些其它经常使用的选项及其释义。

posted @ 2017-08-15 09:01  jzdwajue  阅读(120)  评论(0编辑  收藏  举报