git 命令参考
1. Git 简介
Git 是一个使用频率很高的源码版本管理工具。
由于其官方文档 Git - Reference 太过详细和庞大,因此本文是对其重点或者常用功能的一个总结和索引。主要用于快速查询相关用法。
1.1. help
1.2. config
2. 创建与拉取仓库
2.1. init
2.2. clone
3. 生成快照
3.1. add
3.2. status
3.3. commit
3.4. restore
3.5. reset
3.6. rm
3.7. mv
4. 分支与合并
4.1. branch
Git-branch 用于显示、创建或删除分支。其语法格式如下:
#列出分支
git branch [-v] [(-r | --remotes) | (-a | --all)]
[--[no-]merged [<commit>]] [--[no-]contains [<commit>]]
#新建分支
git branch [--track | --no-track] [-f] <branchname> [<start-point>]
#设置上游分支
git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
#取消上游分支
git branch --unset-upstream [<branchname>]
#删除分支
git branch -d <branchname>…
示例:
options
其选项的解释如下:
选项 | 说明 |
---|---|
-v | -vv | 显示 commit 号、远程跟踪分支等更多信息。 |
--[no-]merged [<commit>] | 列出通过指定 commit (不)可达的分支 |
--[no-]contains [<commit>] | 列出(不)包含指定 commit 的分支 |
-r | -a | 分别表示列出远程分支和全部分支,默认为本地分支 |
--track |--no-track | 设置新分支追踪远程分支 <start-point> 。 |
<start-point> | 当省略此参数时,新分支默认指向当前 HEAD 。 |
-u <upstream> | 设置上游追踪分支,用于关联本地分支和远程分支。 |
4.2. checkout
Git-checkout 用于切换分支或恢复工作区文件。其语法格式如下:
git checkout [<options>] [<branch> | <commit>] #切换分支
git checkout [<options>] -b|-B <new_branch>] [<start_point>] #新建并切换分支
git checkout [<tree-ish>] [--] <pathspec>… #恢复工作区指定文件
注解:
切换分支
当切换的分支不存在时,但其名称完全匹配一个远程分支名,则新建一个分支,并跟踪此远程分支。相当于以下命令:
git checkout -b <branch> --track <remote>/<branch>
DESCRIPTION
OPTIONS
其常用参数及选项解释如下:
选项 | 说明 |
---|---|
-q | 抑制反馈信息 |
-f | 强制执行 |
<start_point> | 新建分支的源分支的名称,省略时为 HEAD |
<tree-ish> | 树对象的哈希值,详看注解 1 |
<pathspec> | 指定路径,详看注解 2 |
注解:
<tree-ish>
通常为 commit 号。当省略此参数时,表示用暂存区覆盖工作区,否则表示用指定的仓库覆盖暂存区和工作区。
<pathspec>
指定路径,详看 Git-glossary-pathspec。
4.3. tag
Git-tag 用于设置标签,其基本语法格式如下:
git tag [<options>] #列出标签
git tag [-a | -s | -u <keyid>] <tagname> [<commit>] #新建标签
git tag -d <tagname>… #删除标签
示例:
#新建标签 git tag <tagname> <commit> #列出包含 COMMIT 的标签,也就是引入此补丁的标签 git tag --contains <commit>
options
其常用选项如下:
选项 | 说明 |
---|---|
-a |-s |-u <keyid> | 新建标签类型,详看注解 1 |
--contains [<commit>] | 列出包含指定 commit 的标签 |
--no-contains [<commit>] | 不包含 |
--merged [<commit>] | 列出通过指定 commit 可达的标签 |
--no-merged [<commit>] | 不可达 |
--list [<pattern>...] | 列出符合 shell 通配符 pattern 的标签 |
注解:
-a |-s |-u <keyid>
如果指定
-a
、-s
或者-u KEYID
选项,则会创建一个附注标签(annotated),否则会创建一个轻量标签(lightweight)。
4.4. merge
Git-merge 用于合并两个或多个分支。其语法格式如下:
git merge [<options>] [<commit>…] #合并分支
git merge (--continue | --abort | --quit) #发生冲突后,继续或退出合并
示例:
options
其常用选项如下:
选项 | 说明 |
---|---|
--no-ff | fast-forward 情况也产生一个新的合并提交。 |
--stat | 合并结束后,显示差异总览信息。 |
-v | 显示更多调试信息。 |
--abort | 发生合并冲突后,回退到合并前。 |
--continue | 手动解决合并冲突后,继续执行合并。 |
5. 同步远程仓库
5.1. fetch
5.2. pull
5.3. push
5.4. remote
Git-remote 用于管理远程追踪仓库。其语法格式如下:
git remote [-v | --verbose] #列出所有仓库名
git remote add <name> <url> #添加一个仓库
git remote rename <old> <new> #重命名仓库
git remote set-url [--add | --delete] [--push] <name> <newurl> [<oldurl>] #设置仓库 URLs
git remote [-v | --verbose] show [-n] <name>… #显示仓库信息
git remote prune [--dry-run] <name>… #删除仓库过期分支
示例:
options
其选项解释如下:
选项 | 说明 |
---|---|
-v |--verbose | 显示跟多信息,必须位于 remote 和 subcommand 之间。 |
--add | --delete | 删除或添加指定 URLs,详看注解 1 |
--push | 指定 push URLs ,详看注解 2 |
-n | 不联机查询远程仓库,使用缓存信息。 |
--dry-run | 仅报告哪些分支将要被删除,不真正执行。 |
注解:
[--add |--delete]
当省略此选项时,默认为修改第一个匹配到的
URLs
。否则表示添加或删除指定URLs
。[--push]
指定
push URLs
。当push
和fetch
的仓库不同时,使用此选项。
6. 检查与比较
6.1. log
Git-log 用于查看 commit
历史信息,其基本语法格式如下:
git log [<options>] [<revision range>] [[--] <path>…]
示例:
#单行显示 git log --oneline --graph #哈希 提交者,提交时间: 说明 git log --pretty=format:"%Cgreen%h %Cred%d%Creset %cn,%cd: %s" --date=short --graph #显示每个 commit 历史文件变动的统计信息 git log --stat #显示添加或删除内容符合 <pattern> 的提交历史 git log -S <pattern> #显示提交信息匹配 <pattern> 的提交 git log --grep=<pattern> #显示 <path> 目录或者文件的详细变化历史 git log -p <path> #显示从引用 <rev> 之后,<path> 目录或者文件的变动历史 git log <rev>.. -- <path> #显示 <file> 文件的 <func> 函数的变动历史 git log -L:<func>:<file>
6.1.1. options
其选项可分为两部分:
- 筛选输出哪些
commit
信息,详见:commit_limiting - 定制每条
commit
信息的格式,详见:commit_formatting
6.1.1.1. 筛选
以下列出一些常用选项:
选项 | 说明 |
---|---|
-<n> | 仅显示最近的 n 条提交 |
--all | 显示所有的引用 |
--simplify-by-decoration | 仅显示被分支或标签引用的提交 |
--date-order | 按时间顺序显示 |
--since=<date>, --after=<date> | 仅显示指定时间之后的提交 |
--until=<date>, --before=<date> | 仅显示指定时间之前的提交 |
--author=<pattern> | 仅显示指定作者 |
--committer=<pattern> | 仅显示指定提交者的提交 |
--grep=<pattern> | 仅显示提交说明中包含指定字符串的提交 |
-S <pattern> | 仅显示内容添加或删除指定字符串的提交,详看注解 1 |
-L:<funcname>:<file> | 仅显示指定文件下的函数有变化的提交 |
-L <start>,<end>:<file> | 仅显示指定文件下指定行之间有变化的提交,详看注解 2 |
注解:
显示添加或删除的内容匹配正则表达式 <pattern> 的提交。
选项中的
<start>
和<end>
可以接收 number 或者 /regex/。
6.1.1.2. 格式
以下列出一些常用选项:
选项 | 说明 |
---|---|
-p | 按补丁格式显示每个提交引入的差异。详看注解 1 |
--stat | 显示每次提交的文件修改统计信息。 |
--shortstat | 只显示 --stat 中最后的行数修改添加移除统计。 |
--name-only | 仅在提交信息后显示已修改的文件清单 |
--date=<format> | 时间格式,常用 short 参数,形如(YYYY-MM-DD) 。 |
--relative-date | 使用较短的相对时间(比如“2 weeks ago”)。 |
--graph | 在日志旁以 ASCII 图形显示分支与合并历史。 |
--pretty[=<format>] | 使用定制格式显示历史提交信息。详看注解 2 |
注解:
选项内部调用
Git-diff
显示每个相邻提交之间差异,可查看 [Git-diff](## diff) 命令详细介绍。选项的参数
<format>
可以为oneline
、short
、fuller
和format:<string>
等,以下列出format:<string>
的常用参数。
选项 说明 %h 提交的简写哈希值 %p 父提交的简写哈希值 %an 作者名字 %cn 提交者的名字 %cd 提交日期 %s 提交说明 %d ref名称 %Cred 变成红色 %reset 恢复颜色
6.1.2. revision range
<revision range>
有以下几种形式,其中 <rev>
可以为 <commit>
、<tag>
、<branch>
等,详见 git-revisions。
-
<rev>
通过
rev
可达的commit
,包括rev
。 -
^<rev>
通过
rev
不可达的commit
。 -
<rev1>..<rev2>
通过
rev2
可达的commit
,去除掉通过rev1
可达的commit
。 -
<rev1>...<rev2>
通过
rev1
或rev2
可达的commit
,去除都可达的commit
。 -
<rev>^-<n>
相当于
<rev>^<n>..<rev>
,表示离rev
最近的n
个祖先commit
。
6.1.3. path
仅显示给出 <path>
所指定的文件有变化的 commit
,前面跟 --
以防和其他参数混淆。
6.2. diff
Git-diff 用于显示 commit
之间,或者和工作区(working tree)以及暂存区(index)之间的差异。其基本格式如下:
git diff [<options>] [--] [<path>…] # 工作区 VS 暂存区
git diff [<options>] <commit> [--] [<path>…] # 工作区 VS <commit>
git diff [<options>] --cached [--merge-base] [<commit>] [--] [<path>…] # 暂存区 VS <commit>
git diff [<options>] [--merge-base] <commit> <commit> [--] [<path>…] # <commit> VS <commit>
git diff [<options>] --no-index [--] <path> <path> # <path> VS <path>
示例:
#显示工作区与暂存区的区别 git diff #显示暂存区与当前分支最新提交之间 FILE 文件的区别 git diff --cached <file> #显示工作区与当前分支最新提交之间 FILE 文件的区别 git diff HEAD <file> #显示 branch 分支和 tag 标签之间的区别统计信息 git diff --stat <branch> <tag>
6.2.1. options
以下列出一些常用选项
选项 | 说明 |
---|---|
-p | 默认选项 |
--stat | 生成差异统计(diffstat) |
--numstat | 显示每个文件添加和删除的行数统计信息 |
--shortstat | 显示改变的文件数,添加和删除的行数的总计值 |
--name-only | 显示修改的文件名 |
--color[=<when>] | 参数 <when> 可以为 auto 、always 和 never 。 |
6.2.2. path
仅显示给出 PATH 所指定文件的变化,前面跟 --
以防和其他参数混淆。