Git 常用命令


常用命令

全局参数

用法: 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

在当前目录创建一个名为 .git 的子目录,这个子目录里包含初始化 Git 仓库的所有必须文件。

常用参数:

  • --quiet:静默模式,简写 -q
  • --bare:创建一个裸仓库。

克隆一个远程仓库

命令: git clone

在指定目录克隆仓库,并初始化一个 .git 子目录。

常用参数:

  • --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 add . 命令。

提交到本地仓库

命令: git commit -m 'message'

将文件提交到本地仓库。注意任何未暂存的仍然保持已修改状态的文件,默认不会被提交。

如果提交之后立即发现漏掉了文件或者写错了提交信息,可立即使用 git commit --amend 命令进行替换提交,此时快照保持不变,而你所修改的只是提交信息。

常用参数:

  • --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:以逆序方式显示日志信息。

git log --pretty='format:' 常用选项

选项 说明
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮箱
%ad 作者修订日期(可以用 --date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮箱
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明

如果想要查看指定用户的提交记录,可以使用 git log --author='username' 命令。

修改删除文件

删除文件

命令: 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 add 操作是相反的。

常见用法如下:

  • 取消暂存某个文件:git reset HEAD filegit rm --cached file
  • 放弃工作区所有修改:git reset --hard
  • 还原对某个文件的修改:git checkout -- file,仅对未暂存文件有效。
  • 恢复工作区到某个提交对象:比如 git reset --hard d9522be

常用参数:

  • --quiet:静默模式,简写 -q
  • --hard:放弃工作区所有修改。
  • --keep:取消工作区所有暂存。
  • --mixed:取消暂存某个文件,这是默认动作。

打标签

和其他版本控制系统一样,Git 也可以给历史中的某一个提交打上标签,以示重要。在 Git 中有两种主要类型的标签:

  • 轻量标签:好像一个不会改变的分支,但它只是一个特定提交的引用。
  • 附注标签:存储在仓库中的一个完整对象,其中包含标签的附注信息。

列出标签

命令: git tag

默认以字典顺序列出标签。还可以使用 -l--list 选项,再加通配符,筛选出某个版本所有的标签,比如 git tag -l 'v2.1.*'

常用参数:

  • --list:列出标签,简写 -l
  • --verify:验证标签,简写 -v
  • -n:标签注释,还可指定显示行数,比如 -n1
  • --contains:仅显示包含指定提交对象的标签。
  • --no-contains:仅显示不包含指定提交对象的标签。
  • --points-at:只显示指定对象的标签。

创建标签

在 Git 中,你不仅可以给当前提交打标签,也可以对过去的提交打标签,也就是所谓的后期标签,要在哪个提交上打标签,只需要在命令的末尾指定提交的校验和即可。

常见用法如下:

  1. 创建附注标签:git tag -a -m []
  2. 创建轻量标签: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]

默认情况下,推送时标签并不会被传送到远程仓库中,你必须手动执行上述操作。如果想要一次性推送很多标签,可以使用 --tags 选项。

检出标签

命令: git checkout -b [branchname] [tagname]

其实你并不能真的检出一个标签,因为它们并不能像分支一样来回移动。如果你想要工作目录与仓库中特定的标签版本完全一样,则可以在特定的标签上创建一个新分支,使之因为改动向前移动。