创建Repository
有两种方式:
- 基于目录创建
- 克隆
基于目录创建
1 | git init |
上述命令创建了一个仓库,但是并没有把当前目录下面的文件都加入仓库,即还是一个空仓库,后续还需要 git add *.*
, git commint -m 'xxxx'
等命令
克隆
1 | git clone url [newName] |
如果没有newName,则克隆的名字与原先仓库一样。
上述命令包含了几个操作:
- 从url地址下载仓库
- 在本地复制了下载的仓库
- 在当前目录checkout了一分工作文件(基于仓库中最新的版本)
文件状态和命令
在Git中,文件主要分为三种状态
- Modified: 文件修改了,还没进行任何其他操作(或者新文件,还没有被tracked)
- Staged:即下次commit会被记入的文件,相当于下次commit对应的indexing
- 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
2git commit -a
git commit -a -m 'add xxxx'
查看文件状态
Git Status
可以详细列出处于各种状态的文件:1
git status
上述信息如果嫌过多的话,可以使用short形式1
2git 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/z
,a/b/z
,a/b/c/z
等
- nested dirctories,例如
- !
- !lib.a,lib.a文件需要被tracked,不能ignore
- /结尾
- 表示目录,
build/
即build
目录下面所有文件 doc/**/*.pdf
:doc
目录下,所有的pdf文件
- 表示目录,
##查看Log
1 | git log // 最新的先显示 |
其他文件操作
移除文件
从Git中移除,并且从working directory里面删除对应文件:
1 | git rm xxx.yy |
重命名文件
1 | git mv name1 name2 |
上述命令等价于下面三个命令:
1 | mv name1 name2 |
重新递交
1 | git commit --amend |
把文件从staged状态移除
1 | git reset HEAD xxxxxx |
放弃修改
1 | git checkout --xxxx.txt |