常用命令
全局参数
用法: git 命令 [参数]
1 2 3 4 5 6 7 8 9 10 11 | --version 显示版本号 --help 查看帮助文档 -C <path> 指定运行工作目录 -c name=value 设置配置参数 --html-path 打印HTML文档路径 --man-path 打印手册路径 --info-path 打印Info路径 --bare 设置裸仓库 --git-dir=<path> 设置仓库路径 --work-tree=<path> 设置工作目录路径 --namespace=<name> 设置Git命名空间 |
初始化仓库
初始化一个新仓库
命令: git init
在当前目录创建一个名为
常用参数:
-
--quiet :静默模式,简写-q 。 -
--bare :创建一个裸仓库。
克隆一个远程仓库
命令: git clone
在指定目录克隆仓库,并初始化一个
常用参数:
-
--local :克隆一个本地仓库,简写-l 。 -
--no-hardlinks :克隆时不使用硬链接(常用于复制备份)。 -
--quiet :静默模式,简写-q 。 -
--verbose :详细模式,简写-v 。 -
--no-tags :不克隆任何标签。 -
--origin :指定远程仓库别名,默认 origin,简称-o 。 -
--branch :检出远程仓库指定分支,简称-b 。 -
--no-checkout :克隆时不执行检出,简写-n 。 -
--mirror :制作仓库镜像,类似于--bare 。
添加提交文件
暂存或添加文件
命令: git add
添加已跟踪已修改的文件或未跟踪的新文件到暂存区。
常用参数:
-
--dry-run :仅测试,不实际执行,简写-n 。 -
--verbose :详细模式,简写-v 。 -
--force :允许添加已忽略文件,简写-f 。 -
--all :添加所有已跟踪或未跟踪文件,简写-A 。 -
--ignore-errors :忽略错误文件。
添加当前目录下所有文件到暂存区,也可使用
提交到本地仓库
命令: git commit -m 'message'
将文件提交到本地仓库。注意任何未暂存的仍然保持已修改状态的文件,默认不会被提交。
如果提交之后立即发现漏掉了文件或者写错了提交信息,可立即使用
常用参数:
-
--dry-run :仅测试,不实际执行。 -
--message :提交信息,简写-m 。 -
--file :从指定文件读取信息并提交,简写-F 。 -
--reuse-message :重用某个提交对象的提交信息,简写-C 。 -
--reedit-message :编辑并重用某个提交对象的提交信息,简写-c 。 -
--author :指定提交作者。 -
--date :指定提交日期。 -
--reset-author :将作者重置为提交者,常和-C/-c/--amend 等一起使用。 -
--all :提交所有变化文件,未跟踪的除外,可用于跳过暂存操作,简写-a 。 -
--only :仅提交指定变化文件,未跟踪的除外,简写-o 。 -
--amend :修改之前的提交,包括提交内容和提交信息。
检查文件状态
命令: git status
显示工作目录文件状态。
- 未跟踪:Untracked files。
- 已暂存:Changes to be committed。
- 未暂存:Changes not staged for commit。
如果一个文件同时出现在暂存区和非暂存区,那是因为你修改了已暂存文件,而没有再次添加到暂存区。如果此时提交,则只会提交上次暂存的那个版本,之后的修改并不会被提交,所以你需要再次暂存。
常用参数:
-
--verbose :详细模式,简写-v 。 -
--short :简要状态,简写-s 。 -
--branch :显示当前分支,简写-b 。 -
--show-stash :显示隐藏信息。 -
--ignored :显示忽略文件。
简要状态说明:
- 左边:已操作且已暂存。
- 右边:已操作尚未暂存。
- 左右:已暂存又被操作。
符号 | 说明 |
---|---|
M | 已修改 |
A | 已添加 |
D | 已删除 |
C | 已复制 |
R | 已重命名 |
U | 已更新尚未合并 |
?? | 新添加尚未跟踪 |
!! | 已忽略 |
查看修改内容
命令: git diff
查看文件修改内容。
注意: 此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是尚未暂存的文件修改内容,而不是自上次提交以来所做的改动。所以有时候你暂存了所有文件后,再查看修改却什么也没有,就是这个原因。
常用参数:
-
--cached :查看已暂存文件的内容变化。 -
--numstat :显示文件修改的行数。 -
--shortstat :显示变化文件的数目。 -
--name-only :显示变化文件的名称。 -
--name-status :显示变化文件的名称和状态。 -
--no-renames :关闭重命名文件检查。 -
--text :把所有文件视为文本,简写-a 。 -
--ignore-cr-at-eol :忽略行尾回车。 -
--ignore-space-at-eol :忽略行尾空白变化。 -
--ignore-space-change :忽略空白变化数量,简写-b 。 -
--ignore-all-space :忽略所有空白变化,简写-w 。
查看提交历史
命令: git log
查看提交日志信息。
说明: 作者指的是实际作出修改的人,提交者指的是最后将此工作成果提交到仓库的人。所以当你为某个项目发布补丁,然后某个核心成员将你的补丁并入项目时,你就是作者,而他就是提交者。
常用参数:
-
--max-count :查看日志的数量,简写-n 或- 。 -
--skip :跳过查看的日志数量。 -
-p :显示提交的内容差异,可结合-n 来显示最近几次差异。 -
--stat :显示每次更新的统计信息。 -
--numstat :显示文件修改的行数。 -
--name-status :显示变化文件的名称和状态。 -
--graph :以图形方式表示分支的合并历史。 -
--pretty 和--format :使用指定格式显示提交日志。可用的选项包括 oneline、short、full、fuller 和 format。 -
--since 和--after :仅显示指定时间之后的提交。 -
--until 和--before :仅显示指定时间之前的提交。 -
--abbrev-commit :仅显示 SHA-1 前 7 个字符,而非所有的 40 个字符。 -
--oneline :这是--pretty=oneline --abbrev-commit 简写。 -
--author :仅显示指定作者的提交。 -
--committer :仅显示指定提交者的提交。 -
--grep :筛选包含指定关键字的提交。 -
--merges :仅显示合并过的提交。 -
--branches :仅显示指定分支的提交。 -
--tags :仅显示指定标签的提交。 -
--remotes :仅显示指定仓库的提交。 -
--reverse :以逆序方式显示日志信息。
选项 | 说明 |
---|---|
%H | 提交对象(commit)的完整哈希字串 |
%h | 提交对象的简短哈希字串 |
%T | 树对象(tree)的完整哈希字串 |
%t | 树对象的简短哈希字串 |
%P | 父对象(parent)的完整哈希字串 |
%p | 父对象的简短哈希字串 |
%an | 作者(author)的名字 |
%ae | 作者的电子邮箱 |
%ad | 作者修订日期(可以用 --date= 选项定制格式) |
%ar | 作者修订日期,按多久以前的方式显示 |
%cn | 提交者(committer)的名字 |
%ce | 提交者的电子邮箱 |
%cd | 提交日期 |
%cr | 提交日期,按多久以前的方式显示 |
%s | 提交说明 |
如果想要查看指定用户的提交记录,可以使用
修改删除文件
删除文件
命令: git rm
从工作目录删除文件。
说明: 可使用 glob 模式删除匹配文件。如果只是简单地从工作目录中手动删除已跟踪的文件,则会出现在未暂存文件列表中,此时需要进行暂存才可以真正删除。
常用参数:
-
--dry-run :仅测试,不实际执行,简写-n 。 -
--quiet :静默模式,简写-q 。 -
--force :强制删除,简写-f 。 -
-r :递规删除目录及其所有文件。 -
-- :分离命令行选项和文件,当文件名可能被误认为是命令行选项时很有用。 -
--cached :从暂存区删除文件,但会以未跟踪状态保留在工作目录中。
移动重命名文件
命令: git mv
移动或重命名文件、目录或者软链接。
常用参数:
-
--dry-run :仅测试,不实际执行,简写-n 。 -
--verbose :详细模式,简写-v 。 -
--force :强制移动或重命名,简写-f 。 -
-k :跳过可能导致错误的操作。
撤消还原操作
命令: git reset
撤消、重置工作目录或文件,这和
常见用法如下:
- 取消暂存某个文件:
git reset HEAD file 或git rm --cached file 。 - 放弃工作区所有修改:
git reset --hard 。 - 还原对某个文件的修改:
git checkout -- file ,仅对未暂存文件有效。 - 恢复工作区到某个提交对象:比如
git reset --hard d9522be 。
常用参数:
-
--quiet :静默模式,简写-q 。 -
--hard :放弃工作区所有修改。 -
--keep :取消工作区所有暂存。 -
--mixed :取消暂存某个文件,这是默认动作。
打标签
和其他版本控制系统一样,Git 也可以给历史中的某一个提交打上标签,以示重要。在 Git 中有两种主要类型的标签:
- 轻量标签:好像一个不会改变的分支,但它只是一个特定提交的引用。
- 附注标签:存储在仓库中的一个完整对象,其中包含标签的附注信息。
列出标签
命令: git tag
默认以字典顺序列出标签。还可以使用
常用参数:
-
--list :列出标签,简写-l 。 -
--verify :验证标签,简写-v 。 -
-n :标签注释,还可指定显示行数,比如-n1 。 -
--contains :仅显示包含指定提交对象的标签。 -
--no-contains :仅显示不包含指定提交对象的标签。 -
--points-at :只显示指定对象的标签。
创建标签
在 Git 中,你不仅可以给当前提交打标签,也可以对过去的提交打标签,也就是所谓的后期标签,要在哪个提交上打标签,只需要在命令的末尾指定提交的校验和即可。
常见用法如下:
- 创建附注标签:
git tag -a 。-m [] - 创建轻量标签:
git tag 。[]
常用参数:
-
--annotate :附注标签,简写-a 。 -
--message :标签信息,简写-m 。 -
--file :从指定文件读取信息,简写-F 。 -
--sign :带签名的附注标签,简写-s 。 -
--cleanup :如何处理消息中的空格和# 注释。可用的选项包括 verbatim、whitespace 和 strip。 -
--force :强制创建,简写-f 。 -
--create-reflog :创建标签历史。
删除标签
命令: git tag -d
可以同时指定删除多个标签。
共享标签
命令: git push origin [tagname]
默认情况下,推送时标签并不会被传送到远程仓库中,你必须手动执行上述操作。如果想要一次性推送很多标签,可以使用
检出标签
命令: git checkout -b [branchname] [tagname]
其实你并不能真的检出一个标签,因为它们并不能像分支一样来回移动。如果你想要工作目录与仓库中特定的标签版本完全一样,则可以在特定的标签上创建一个新分支,使之因为改动向前移动。