Git学习笔记 (3) - Git基本命令

创建Repository

有两种方式:

  1. 基于目录创建
  2. 克隆

基于目录创建

1
git init

上述命令创建了一个仓库,但是并没有把当前目录下面的文件都加入仓库,即还是一个空仓库,后续还需要 git add *.*, git commint -m 'xxxx'等命令

克隆

1
git clone url  [newName]

如果没有newName,则克隆的名字与原先仓库一样。

上述命令包含了几个操作:

  1. 从url地址下载仓库
  2. 在本地复制了下载的仓库
  3. 在当前目录checkout了一分工作文件(基于仓库中最新的版本)

文件状态和命令

在Git中,文件主要分为三种状态

  1. Modified: 文件修改了,还没进行任何其他操作(或者新文件,还没有被tracked)
  2. Staged:即下次commit会被记入的文件,相当于下次commit对应的indexing
  3. Committed:已经递交,所有变化已经被git所记录

Modified -> Staged

1
git add xx.xx

Staged -> committed

1
git commit -m 'coments and messages`

跳过Staged Area

使用git commit的同时添加参数-a,会自动把所有被tracked的文件的改动都自动stage,然后再递交:

1
2
git commit -a
git commit -a -m 'add xxxx'

查看文件状态

Git Status

可以详细列出处于各种状态的文件:

1
git status

上述信息如果嫌过多的话,可以使用short形式

1
2
git status --short
git status -s

输出分为两列

  • 第一列:文件状态(M:Modified, A:Staged(Added), ??: not traced)
  • 第二列:文件名称

Git Diff

显示staged以后做的修改的部分,如果staged以后,没有修改,则此命令没有输出。

1
git diff

如果需要看staged中的修改部分,即哪些修改后续将会进入commit,需要添加参数:

1
git diff --staged

忽略文件

项目当前目录下,修改文件.gitignore,一些规则如下:

  • #
    • 注释行
  • *
    • 0或更多个character
  • [abc]
    • a 或 b 或 c
    • 单个character
  • [0-9]
    • 0-9中间一个数
  • \
    • nested dirctories,例如a/**/z,匹配下面各种情况a/za/b/z, a/b/c/z
    • !lib.a,lib.a文件需要被tracked,不能ignore
  • /结尾
    • 表示目录,build/build目录下面所有文件
    • doc/**/*.pdfdoc目录下,所有的pdf文件

##查看Log

1
2
3
git log      // 最新的先显示
git log -p // 显示每次commit对应的difference
git log -2 // 显示最近2次的结果

其他文件操作

移除文件

从Git中移除,并且从working directory里面删除对应文件:

1
git rm xxx.yy

重命名文件

1
git mv name1 name2

上述命令等价于下面三个命令:

1
2
3
mv name1 name2
git rm name1
git add name2

重新递交

1
git commit --amend

把文件从staged状态移除

1
git reset HEAD xxxxxx

放弃修改

1
git checkout --xxxx.txt