章节 ▾ 第二版

A3.3 附录 C:Git 命令 - 基本快照

基本快照

对于将内容暂存并提交到历史记录中的基本工作流程,只需要少数几个基本命令。

git add

git add 命令将工作目录中的内容添加到暂存区(或称“索引”),以供下一次提交使用。当运行 git commit 命令时,它默认只会查看此暂存区,因此 git add 用于精准构建你希望在下一次提交快照中包含的内容。

这是一个在 Git 中极其重要的命令,本书中多次提及或使用。我们将快速介绍一些可以在书中找到的独特用法。

我们首次在 跟踪新文件 中介绍并详细解释了 git add

我们在 基本的合并冲突 中提到了如何使用它来解决合并冲突。

我们在 交互式暂存 中介绍了如何使用它交互式地仅暂存修改文件中的特定部分。

最后,我们在 树对象 中从底层模拟了它,这样你可以了解它在后台到底做了什么。

git status

git status 命令将向你显示工作目录和暂存区中文件的不同状态。哪些文件已修改但未暂存,哪些文件已暂存但尚未提交。在正常形式下,它还会显示一些关于如何在这些阶段之间移动文件的基本提示。

我们首先在 检查文件状态 中介绍了 status,包括其基本形式和简化形式。虽然我们在全书都会用到它,但 git status 命令几乎所有能做的事情都在那里涵盖了。

git diff

当你想要查看任意两个树之间的差异时,可以使用 git diff 命令。这可以是你的工作环境和暂存区之间的差异(单独使用 git diff)、暂存区和最后一次提交之间的差异(git diff --staged),或者两次提交之间的差异(git diff master branchB)。

我们首先在 查看已暂存和未暂存的更改 中查看了 git diff 的基本用法,展示了如何查看哪些更改已暂存,哪些尚未暂存。

我们在 提交指南 中使用 --check 选项在提交前查找可能存在的空白字符问题。

我们通过 确定引入了什么 中的 git diff A…​B 语法,了解了如何更有效地检查分支之间的差异。

我们在 高级合并 中使用 -b 过滤掉空白字符差异,并学习了如何使用 --theirs--ours--base 来比较冲突文件的不同阶段。

最后,我们在 子模块入门 中使用 --submodule 有效地比较子模块的更改。

git difftool

git difftool 命令只是启动一个外部工具来显示两个树之间的差异,以备你不想使用内置的 git diff 命令。

我们在 查看已暂存和未暂存的更改 中简要提到了这一点。

git commit

git commit 命令获取所有通过 git add 暂存的文件内容,并在数据库中记录一个新的永久快照,然后将当前分支的指针向前移动到该快照。

我们首先在 提交你的更改 中介绍了提交的基础知识。我们还在那里演示了如何在日常工作流程中使用 -a 标志跳过 git add 步骤,以及如何使用 -m 标志在命令行直接输入提交信息,而不是启动编辑器。

撤消操作 中,我们介绍了如何使用 --amend 选项来重做最近一次提交。

分支简介 中,我们更详细地介绍了 git commit 的作用及其背后的原因。

我们在 签名提交 中了解了如何使用 -S 标志对提交进行加密签名。

最后,我们在 提交对象 中了解了 git commit 命令在后台的操作以及它的实际实现方式。

git reset

git reset 命令主要用于撤消操作,正如其动词含义所暗示的那样。它移动 HEAD 指针,并可选择更改 index(暂存区),如果使用 --hard,还可以选择更改工作目录。最后一个选项如果使用不当可能会导致工作丢失,因此请确保在使用前完全理解它。

我们首先在 取消暂存文件 中有效地介绍了 git reset 最简单的用法,即取消暂存之前运行过 git add 的文件。

然后,我们在 重置揭秘 中非常详细地介绍了它,该章节专门用于解释此命令。

我们在 终止合并 中使用 git reset --hard 来终止合并,同时还使用了 git merge --abort,它本质上是 git reset 命令的一个包装器。

git rm

git rm 命令用于从 Git 的暂存区和工作目录中删除文件。它与 git add 类似,因为它为下一次提交暂存了一个删除操作。

我们在 删除文件 中详细介绍了 git rm 命令,包括递归删除文件,以及使用 --cached 仅从暂存区删除文件而将其保留在工作目录中。

本书中 git rm 的唯一其他不同用法是在 移除对象 中,我们在运行 git filter-branch 时简要使用并解释了 --ignore-unmatch。它仅仅是在我们尝试删除的文件不存在时阻止报错。这在脚本编写中很有用。

git mv

git mv 命令是一个简单的便捷命令,用于移动文件,然后对新文件运行 git add,对旧文件运行 git rm

我们仅在 移动文件 中简要提到了这个命令。

git clean

git clean 命令用于从你的工作目录中删除不需要的文件。这可能包括删除临时的构建产物或合并冲突文件。

我们在 清理工作目录 中涵盖了许多可以使用 clean 命令的选项和场景。