2. git的基本命令

作者:jicanmeng

时间:2015年03月03日


git的基本命令有这么几个:

  1. git init
  2. git add
  3. git commit
  4. git log
  5. git show
  6. git diff
  7. git status

git init命令用于建立一个新的git库。举例如下:

[jicanmeng@andy tmp]$ mkdir demo
				[jicanmeng@andy tmp]$ cd demo
				[jicanmeng@andy demo]$ git init
				Initialized empty Git repository in /tmp/demo/.git/
                [jicanmeng@andy demo]$ ls -aF
                ./  ../  .git/

这个隐藏的.git目录就是Git版本库(又叫仓库,repository)。Git版本库所在的目录为/tmp/demo/,它被称为工作区。

如果git的版本是1.6.5或更新的版本,可以使用一条命令来代替上面的三条命令。git init demo就等价于mkdir demo;cd demo;git init;cd ..这四条命令。

git add命令用于将文件添加到暂存区(staging area). 我们在工作区中添加一个文件readme.txt, 一个名称为temp的目录,目录中包含一个a.c的文件。git add readme.txt用于把readme.txt添加到暂存区, git add temp用于把temp目录及目录下的所有文件添加到暂存区。git add .用于把当前目录下面的所有文件都添加到暂存区。命令如下:

[jicanmeng@andy demo]$ echo "This is a description of the project" > readme.txt
				[jicanmeng@andy demo]$ mkdir temp
				[jicanmeng@andy demo]$ echo "hello,a.c" > temp/a.c
                [jicanmeng@andy demo]$ git add readme.txt
                [jicanmeng@andy demo]$ git add temp/a.c

git commit用于把暂存区的内容提交到版本库,在版本库中生成一个新的提交对象。使用此命令时需要填写提交说明。

[jicanmeng@andy demo]$ git commit -m 'initial commit'

修改readme.txt,再提交一次。修改a.c的内容,再提交一次。

[jicanmeng@andy demo]$ vim readme.txt
				[jicanmeng@andy demo]$ git add readme.txt
				[jicanmeng@andy demo]$ git commit -m 'second commit: modify readme.txt
                [jicanmeng@andy demo]$ vim temp/a.c
                [jicanmeng@andy demo]$ git add temp/a.c
				[jicanmeng@andy demo]$ git commit -m 'third commit: modify temp/a.c

git log用于查看提交的历史记录。默认情况下,git log等价于git log HEAD

[jicanmeng@andy demo]$ git log
				commit 2a10915c2fa75ef9485f75b212d672ffe7ad0f2e
				Author: jicanmeng 
				Date:   Tue Mar 3 23:01:25 2015 +0800

				    third commit: modify temp/a.c

				commit 5322be18f7b878078f0bb76a042cc572068889a5
				Author: jicanmeng 
				Date:   Tue Mar 3 23:00:19 2015 +0800

				    second commit: modify readme.txt

				commit 0cdcf33f224e628ea47619214337b9cfffe5f4dc
				Author: jicanmeng 
				Date:   Tue Mar 3 22:59:23 2015 +0800

				    initial commit
				[jicanmeng@andy demo]$

因为当前我们在master分支上,所以上面的命令也等价于git log master

git log的最终参数是一个40位的commit对象的哈希值:

git show命令用于查看某次提交具体修改了那些地方。例如:

[jicanmeng@andy demo]$ git show 2a10915c2fa75ef9485f75b212d672ffe7ad0f2e
				commit 2a10915c2fa75ef9485f75b212d672ffe7ad0f2e
				Author: jicanmeng 
				Date:   Tue Mar 3 23:01:25 2015 +0800

				    third commit: modify temp/a.c

				diff --git a/temp/a.c b/temp/a.c
				index a6e0824..91bae4b 100644
				--- a/temp/a.c
				+++ b/temp/a.c
				@@ -1 +1,3 @@
				 hello,a.c
				+hello,world!
				+
				[jicanmeng@andy demo]$

假如某次提交的提交ID为123456, 并且这次提交修改了很多文件,但我只想查看a.c文件的修改。就用git show 123456 a.c命令即可。

有的时候,我们在工作区修改了文件,在将文件添加到暂存区之前,我们需要确认一下自己修改的是否正确。此时就用到git diff命令了。不带参数时,git diff显示的是工作区和暂存区的差异。git diff --cached或者git diff --staged显示的是暂存区和版本库的差异。

git status命令表示查看当前工作区和暂存区和版本库的差异。

参考资料

  1. Pro Git
  2. git权威指南