13.3 快照基础

对于基本的暂存内容及提交到你的历史记录中的工作流,只有少数基本的命令。

Git add

git add 命令将内容从工作目录添加到暂存区(或称为索引(index)区),以备下次提交。 当 git commit 命令执行时,默认情况下它只会检查暂存区域,因此 git add 是用来确定下一次提交时快照的样子的。

这个命令对于 Git 来说特别重要,所以在本书中被无数次地提及和使用。 我们将快速地过一遍一些可以看到的独特的用法。

  • 我们在 跟踪新文件 一节中介绍并详细解释了 git add 命令。
  • 然后,我们在 遇到冲突时的分支合并 一节中提到了如何使用它来解决合并冲突。
  • 接下来,我们在 7.2 交互式暂存 一章中使用它来交互式的暂存一个已修改文件的特定部分。
  • 最后,在 树对象 一节中我们在底层模拟了它的用法,以便你了解幕后发生了什么。

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 语法来更有效地比较不同分支之间的差异。
  • 7.8 高级合并 一节中我们使用 -b 选项来过滤掉空白字符的差异,及通过 --theirs--ours--base 选项来比较不同暂存区冲突文件的差异。
  • 最后,在 开始使用子模块 一节中,我们使用此命令合 --submodule 选项来有效地比较子模块的变化。

Git difftool

当你不想使用内置的 git diff 命令时。git difftool 可以用来简单地启动一个外部工具来为你展示两棵树之间的差异。

我们只在 查看已暂存和未暂存的 一节中简单的提到了此命令。

Git commit

git commit 命令将所有通过 git add 暂存的文件内容在数据库中创建一个持久的快照,然后将当前分支上的分支指针移到其之上。

  • 首先,我们在 提交更新 一节中涉及了此命令的基本用法。 我们演示了如何在日常的工作流程中通过使用 -a 标志来跳过 git add 这一步,及如何使用 -m 标志通过命令行而不启动一个编辑器来传递提交信息。
  • 2.4 撤消操作 一节中我们介绍了使用 --amend 选项来重做最后的提交。
  • 3.1 分支简介 ,我们探讨了 git commit 的更多细节,及工作原理。
  • 签署标签 一节中我们探讨了如何使用 -S 标志来为提交签名加密。
  • 最后,在 提交对象 一节中,我们了解了 git commit 在背后做了什么,及它是如何实现的。

Git reset

git reset 命令主要用来根据你传递给动作的参数来执行撤销操作。 它可以移动 HEAD 指针并且可选的改变 index 或者暂存区,如果你使用 --hard 参数的话你甚至可以改变工作区。 如果错误地为这个命令附加后面的参数,你可能会丢失你的工作,所以在使用前你要确定你已经完全理解了它。

  • 首先,我们在 取消暂存的文件 一节中介绍了 git reset 简单高效的用法,用来对执行过 git add 命令的文件取消暂存。
  • 7.7 重置揭密 一节中我们详细介绍了此命令,几乎整节都在解释此命令。
  • 中断一次合并 一节中,我们使用 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 命令的大量选项及场景。

下一节:Git 有几个实现大部的分支及合并功能的实用命令。