标签: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
则仅显示最近的两次更新.某些时候,单词层面的对比,比行层面的对比,更加容易观察。Git 提供了 --word-diff
选项。我们可以将其添加到
git log -p
命令的后面,从而获取单词层面上的对比。在程序代码中进行单词层面的对比常常是没什么用的。不过当你需要在书籍、论文这种很大的文本文件上进行对比的时候,这个功能就显出用武之地了。
新增加的单词被 {+ +}
括起来,被删除的单词被 [- -]
括起来。在进行单词层面的对比的时候,你可能希望上下文( context )行数从默认的 3 行,减为 1 行,那么可以使用
-U1
选项。
还有个常用的 --pretty
选项,可以指定使用完全不同于默认格式的方式展示提交历史。比如用 oneline
将每个提交放在一行显示,这在提交数很大时非常有用。
以上只是简单介绍了一些 git log
命令支持的选项。表 2-2 还列出了一些其他常用的选项及其释义。
标签:git 原理 操作
原文地址:http://blog.csdn.net/yapian8/article/details/40346657