本篇文章记录使用 Git 完成各种工作是将会用到的各种就基本命令。
获取 Git 仓库
将当前目录初始化为仓库
$ git init
新建目录并初始化为仓库
$ git init xxx
将目录初始化为仓库后将创建一个 .git 子目录,仓库的骨干,项目里的文件还没有被跟踪。
初始化仓库后常用的命令:
$ git add readme$ git add *.py$ git add *$ git add *-log$ git commit -m 'initial project version'
克隆现有的仓库
$ git clone https://github.com/skynet/git-demo
也可以自定义仓库的名字
$ git clone https://github.com/skynet/git-demo xxx
记录每次更新到仓库
工作目录中的文件有两种状态:已跟踪和未跟踪。已跟踪的文件是指那些被纳入了版本控制的文件,在上一次的快照中有它们的记录,在工作一段时间后,它们的状态可能是未修改,已修改或已放入暂存区。
工作目录中除已跟踪文件外的其他文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有被放入暂存区。
文件的状态变化周期:
![3ff113816a9f03bc491e04ff5242f069.png](https://img-blog.csdnimg.cn/img_convert/3ff113816a9f03bc491e04ff5242f069.png)
文件状态变化周期
可以使用 git status 查看工作区状态,git status -s 或 --short 以简洁的方式插查看状态:
$ git status -s M READMEMM RakefileA lib/git.rbM lib/simplegit.rb?? LICENSE.txt
新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区的文件前面有 A 标记,修改过的文件前面有M 标记。输出中有两栏,左侧指明了暂存区的状态,右侧指明了工作区的状态。
忽略文件
可以创建 .gitignore 文件,在其中列出不想被跟踪的文件。
文件 .gitignore 的格式规范如下:
- 所有空行或者以 # 开头的行都会被 Git 忽略。
- 可以使用标准的 blob 模式匹配,它会递归地应用到各工作区中。
- 匹配模式可以以 / 开头防止递归。
- 匹配模式可以以 / 结尾指定目录。
- 以 !开头排除忽略。
- ** 匹配任意中间目录。
查看提交历史
$ git log
-p 或 --patch 显示差异,也可以限制数量,如 -2 ,使用 --stat 选项查看简略统计信息
$ git log -p -2$ git log --stat
git log 常用选项:
-p 按补丁格式显示每个提交引入的差异。
--stat 显示每次提交的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。
--relative-date 使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。
--graph 在日志旁以 ASCII 图形显示分支与合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和 format(用来定义自己的格式)。
--oneline --pretty=oneline --abbrev-commit 合用的简写。
除了定制输出格式的选项之外,git log 还有许多非常实用的限制输出长度的选项,也就是只输出一部分的提交。
$ git log --since=2.weeks
一个非常有用的过滤器是 -S(俗称“pickaxe”选项,取“用鹤嘴锄在土里捡石头”之意), 它接受一个字符串参数,并且只会显示那些添加或删除了该字符串的提交。 假设你想找出添加或删除了对某一个特定函数的引用的提交,可以调用:
$ git log -S function_name
限制 git log 输出的选项:
-仅显示最近的 n 条提交。
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示作者匹配指定字符串的提交。
--committer 仅显示提交者匹配指定字符串的提交。
--grep 仅显示提交说明中包含指定字符串的提交。
-S 仅显示添加或删除内容匹配指定字符串的提交。
一个实际的例子,如果要在 Git 源码库中查看 Junio Hamano 在 2008 年 10 月其间, 除了合并提交之外的哪一个提交修改了测试文件,可以使用下面的命令:
$ git log --pretty="%h - %s" --author='Junio C Hamano' --since="2008-10-01" --before="2008-11-01" --no-merges -- t/
记录中可能有为数不少的合并提交,它们所包含的信息通常并不多。 为了避免显示的合并提交弄乱历史记录,可以为 log 加上 --no-merges 选项。
其它基础命令
$ git diff$ git diff --staged$ git rm xxx$ git rm --staged xxx$ git mv xxx yyy$ git commit --amend$ git commit -a -m "xxxx"