一些 Git 命令

最近在集中学习高大上的 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 +0800

 add b

commit db91f7bdc5d509fd79adb4a67e247b91883a90bf
Author: xw_y_am xw_y_am@163.com
Date: Sun Mar 9 17:01:16 2014 +0800

 update a

commit 6014b233c801f9e977d363eb4f80bd01100f32f5
Author: xw_y_am xw_y_am@163.com
Date: Sun Mar 9 17:01:05 2014 +0800

  init

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 +0800

add 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 +0800

add 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 +0800

update a

diff --git a/a b/a
index f70f10e..223b783 100644
--- a/a
+++ b/a
@@ -1 +1 @@
-A
+B
git show 3cc58df

返回结果

C

十分良心有木有!!

暂无评论
  1. 910JQK 910JQK

    ……三指判別有啥用?

    1. xw_y_am xw_y_am

      移动窗口

添加新评论