最近在集中学习高大上的 Git。使用的是 O'REILLY 的Version Control with Git
,个人感觉上,比《Git 权威指南》和Pro Git
读起来感觉好些。只是个人感觉而已。至于学习笔记,由于书上讲得已经很详细,例子也很经典,所以我并没有从书上复制内容到博客上的打算。但是对于以下几个很让人捉机的命令,个人进行了一些试验,并将试验结果发出来,权作笔记了。
git cat-file
git ls-files
git ls-tree
git show
git show-ref
注:本文受众默认为有一定基础的 git 用户,如果您对 git 不甚了解,可绕道。如果对 git 有兴趣,可自行参阅如下内容:
准备工作
操作 git,第一步必然是建立一个 git 的工作环境。
mkdir test
git init
系统显示
Initialized empty Git repository in /data/tmp/.git/
说明软件仓库建立成功。然后添加一些文件到 repo 里:
echo A > a
git add a
git commit -m 'init'
echo B > a
git commit -a -m 'update a'
git tag v1
echo C > b
git add b
git commit -a -m 'add b'
此时使用git log --graph
查看当前的提交日志:
commit 63295ca6d9272ae84c5abd56762330923b650bd7
Author: xw_y_am xw_y_am@163.com
Date: Sun Mar 9 17:05:23 2014 +0800add b
commit db91f7bdc5d509fd79adb4a67e247b91883a90bf
Author: xw_y_am xw_y_am@163.com
Date: Sun Mar 9 17:01:16 2014 +0800update a
commit 6014b233c801f9e977d363eb4f80bd01100f32f5
Author: xw_y_am xw_y_am@163.com
Date: Sun Mar 9 17:01:05 2014 +0800init
ls-files
用于列出当前index
中的文件。
git ls-files
返回结果
a
b
ls-tree
用于列出某次提交中各个blob
的信息。
git ls-tree HEAD
返回结果
100644 blob 223b7836fb19fdf64ba2d3cd6173c6a283141f78 a
100644 blob 3cc58df83752123644fef39faab2393af643b1d2 b
git ls-tree 6014b23
返回结果
100644 blob f70f10e4db19068f79bc43844b49f3eece45c4e8 a
其中第一列表示文件的权限类型,第二列表示该项对应的 git 类型,第三列是该 blob 的 sha1 值,第四列表示文件名。
git show-ref
用于列出refs
下的所有内容。
git show-ref
返回结果
63295ca6d9272ae84c5abd56762330923b650bd7 refs/heads/master
db91f7bdc5d509fd79adb4a67e247b91883a90bf refs/tags/v1
git cat-file
用于列出.git/objects/
里边文件的内容。
> \$ **git cat-file commit HEAD**
返回结果
tree 9d95888103a8af27e4dd5bc89ebd0aa0f7bfc5be
parent db91f7bdc5d509fd79adb4a67e247b91883a90bf
author xw_y_am xw_y_am@163.com 1394355923 +0800
committer xw_y_am xw_y_am@163.com 1394355923 +0800add b
git cat-file blob f70f10e
返回结果
A
tree
, tag
两个参数我现在还不会用。。。
git show
个人认为这个命令是本文涉及的命令中最全能的一个,后边的参数hash
, refs
, branch
, tag
等,想用什么用什么,git show
会自动判断各类的。如果没有参数,则 git 自动理解为git show HEAD
。
git show
返回结果
commit 63295ca6d9272ae84c5abd56762330923b650bd7
Author: xw_y_am xw_y_am@163.com
Date: Sun Mar 9 17:05:23 2014 +0800add b diff --git a/b b/b new file mode 100644 index 0000000..3cc58df --- /dev/null +++ b/b @@ -0,0 +1 @@ +C
git show v1
返回结果
commit db91f7bdc5d509fd79adb4a67e247b91883a90bf
Author: xw_y_am xw_y_am@163.com
Date: Sun Mar 9 17:01:16 2014 +0800update a diff --git a/a b/a index f70f10e..223b783 100644 --- a/a +++ b/a @@ -1 +1 @@ -A +B
git show 3cc58df
返回结果
C
十分良心有木有!!
……三指判別有啥用?
移动窗口