Git Commit:大师班

已发表: 2023-02-26
蓝色背景上显示 Linux 命令提示符的笔记本电脑。
fatmawati achmad zaenuri/Shutterstock.com
Git commit 命令将工作目录中的更改副本存储在 Git 存储库中。 但它也可以用于修改现有提交和还原提交。

任何版本控制系统的一个基本要求是为您存储不同版本的文件。 在 Git 中,执行此操作的命令是commit 。 这里有你需要知道的一切。

目录

什么是 Git 中的提交?
配置提交命令
使用提交命令
基本提交
自动暂存文件
同时进行暂存和提交
致力于不同的分支
对提交进行更改
从提交中删除更改
还原整个提交
Git 瑞士军刀

什么是 Git 中的提交?

提交是在项目的整个生命周期中制作的一系列快照,构成了项目的开发历史。 提交使我们能够提取项目的一个版本,因为它在过去的不同时间点。 为什么这很重要?

版本控制系统 (VCS) 最常用于软件源代码和开发项目。 但它们可以成功地用于任何文本文件集合,例如包含书籍章节的 Markdown 文件。

您可能不希望项目目录中的每个文件都由 VCS 处理,因此您需要能够指定要进行版本控制的文件。 这会将它们添加到项目的版本控制视图中。 他们将受到监视以了解变化。

实现此目的的另一种方法是使用忽略列表。 这告诉 Git 它应该始终忽略哪些文件、目录或文件类型。

随着时间的推移,随着新文件被添加到项目中,一些文件将需要添加到版本控制系统中。 在 Git 中,这是由add命令处理的。 实际上,正如我们将要看到的, add命令起到了双重作用。

为了维护对项目所做更改的历史记录,您将使用commit命令定期要求 Git 存储项目状态的快照。 这是add命令在我们的工作流程中重新出现的地方。 我们使用add命令告诉 Git 我们希望将哪些更改的文件包含在快照中。 然后我们使用commit告诉 Git 创建快照。

配置提交命令

有关提交的信息与它一起存储,因此始终可以知道提交的人、时间以及提交包含的内容。 其中一些元数据是在提交时捕获的,例如提交消息。

每个用户可以配置与开发团队成员身份相关的元数据,以防止重复提供相同的信息。

要为计算机上的所有存储库全局设置名称,请使用此命令。

 git config --global user.name "Dave McKay" 

设置全局 Git 用户名

要验证您的名称是否已设置,请使用此命令。

 git config --global 用户名

检查 Git 全局用户名

如果您需要在特定存储库上使用不同的名称,请切换到项目目录并使用不带--global选项的相同命令。

 git config user.name "McKay, David"
 git 配置用户名

设置特定于存储库的 Git 用户名

我们现在为这个存储库获得了一个不同的默认用户名,我们的全局名称仍然用于其他存储库。

以类似的方式,我们可以通过包含或省略--global选项来全局或为单个存储库设置电子邮件地址。

 git config user.email "[email protected]"
 git config --global user.email "[email protected]"
 git 配置用户.email
 git config --global user.email 

设置全局和特定于存储库的 Git 默认用户电子邮件地址

这些设置保存在配置文件中。 全局 Git 设置保存在“~/.gitconfig”中,特定于存储库的设置保存在存储库的“.git/config”文件中。

commit命令在运行时引用并使用这些值。

使用提交命令

commit命令的基本用途是获取暂存区(称为索引)中的文件,并将它们作为提交存储在存储库的当前分支中。

基本提交

我们有一个文件已更改的项目。 我们将使用add命令暂存文件,然后提交它。 我们正在使用-m (提交消息)选项,以便我们可以提供更改目的的简短描述。 如果我们不使用此选项,则会在提交发生时提示我们输入提交消息。 在命令行加一个更方便。

 git 添加 jibber.c
 git commit -m "更新帮助文本" 

暂存和提交单个文件

如果我们使用git log命令,我们可以按时间顺序查看提交的详细信息,最近的提交位于列表的顶部。

 混帐日志

检查 Git 存储库日志

提交显示在less中。

Git 日志顶部的最新提交

提交已标记有我们之前提供的名称和电子邮件地址,我们的提交消息也被记录下来。

自动暂存文件

暂存许多文件可能需要一点时间。 另一种方法是将-A (全部)选项与add一起使用。

这会自动暂存所有修改过的文件以及所有当前未跟踪的文件。 未跟踪文件的暂存遵循“.gitignore”文件中的设置。 Git 不会暂存您告诉它不想包含的文件。 最后,索引中不再存在于工作目录中的文件将从索引中删除

显然, -A选项会导致很多事情同时发生。 --dry-run选项可让您预览更改而无需实际执行它们。

 git add -A --dry-run 

使用 --dry-run 预览将暂存和取消暂存的文件

在我们的示例中,它将暂存两个修改后的现有文件和两个新文件。 在使用commit命令之前,让我们继续使用-A选项。

 git 添加 -A
 git commit -m "增强解析" 

使用 add -A 选项后提交更改的和新创建的文件

我们可以看到一共更改了四个文件。 其中两个是新创建的文件,已列出。

同时进行暂存和提交

commit命令有一个小写的-a (全部)选项。 这一步执行文件的暂存和提交。

commit -a选项暂存并提交修改后的现有文件,如果文件已从您的工作目录中删除,则从索引中删除这些文件。 它不会自动暂存未跟踪的文件。

add命令一样,commit 命令有一个--dry-run选项,允许您在执行之前预览其操作。

 git commit -a --dry-run 

使用 commit -a 选项预览更改而不执行它们

现在让我们执行命令。

 git commit -a --dry-run 

使用 commit -a 选项一步进行暂存和提交

这些文件已为我们暂存和提交。

致力于不同的分支

如果您对工作目录中的文件进行了一些更改,然后意识到您没有签出正确的分支,则需要将更改提交到正确的分支而不影响当前分支。

Git 没有用于提交到不同分支的命令。 但是您可以使用一点 Git 技巧来纠正这种情况。

我们将使用 Git stash命令来制作更改的副本。 然后我们将检查正确的分支并应用存储中的更改。 要应用隐藏的更改,我们使用pop命令而不是apply命令。 pop命令应用更改并从存储中删除它们。

我们对存储库的new-parser分支进行了一些更改。 它们应该是在classic-parser分支中制作的。

 git 存储
git checkout 经典解析器
git 存储弹出

存储更改、签出分支并应用存储中的更改

我们现在可以执行commit ,并更新这个分支。

 git commit -a -m “添加预解析器功能” 

提交从存储中检索到的更改

如果我们返回到new-parser分支,我们可以看到它是最新的,这意味着更改已从您的工作目录中删除,并且您的存储库和文件是同步的。

 git checkout 新解析器
混帐状态

检查分支的状态以确保它是最新的

相关:如何更新和维护单独的 Git 分支

对提交进行更改

如果您需要改进您的提交消息——也许您发现了其中的拼写错误——或者您忘记暂存一个应该包含在提交中的文件,您可以使用--amend选项来纠正错误。 需要注意的是,这不应该用于已推送到远程存储库的提交。

在我们最后的提交信息中,“fraze”应该是“phrase”。 如果我们使用git log我们可以看到这个。

突出显示类型的 Git 日志

为了纠正这个问题,我们将像这样使用--amend选项。

 git commit --amend -m "优化词组识别" 

使用 commit --amend 选项来更正提交消息

如果我们再次使用git log ,我们可以看到旧提交已被新提交替换,并带有更正的提交消息。

显示更正的提交消息的 Git 日志

如果我们想添加一个忘记暂存的文件,我们可以提交该文件,使其显示为上一次提交的一部分。

我们将使用add暂存文件,然后使用--amend选项进行提交。 --no-edit选项意味着我们不需要提供新的提交信息。 保留先前的提交消息。

 git 添加 jibber.c
 git commit --amend --no-edit 

将文件提交到上一次提交

从提交中删除更改

如果您无意中暂存并提交了您不打算提交的文件,您可以使用reset命令从提交中删除该文件。 我们会将提交重置回暂存区或索引。 然后我们将删除该文件,并重新提交其余文件。

要将最后一次提交重置到暂存区,我们使用reset --soft命令。 HEAD~是“项目提交时间线中 HEAD 后面的提交”的简写,英文是“最后一次提交”。

 git reset --soft HEAD~ 

将最后一次提交发送回暂存区

要删除不应该包含的文件,我们使用reset --mixed命令。 这会将这些更改重置回工作目录,将修改后的文件重新创建为未暂存、未提交的文件。

 git reset --mixed jibber.c 

从 Git 暂存区删除文件

我们需要提交留在索引中的其他文件。

 git commit -m “实验性调整” 

提交保留在暂存区中的文件

原始提交中的其他两个文件为我们重新提交。

相关:如何修复、编辑或撤消 Git 提交(更改 Git 历史)

还原整个提交

有时撤消整个提交是最简单的事情。 它会将您的工作目录和存储库恢复到您提交之前的状态。

我们需要使用提交的散列参考 ID。 我们可以使用git log找到它:

突出显示提交标识符的 Git 日志

复制该引用并在revert命令中使用它:

 git 还原 e5bd4560aef8164c6ca9d6d4620b9db7f66aecc8 

还原由其提交 ID 标识的提交

这将打开您的默认编辑器,以便您可以编辑还原消息。 系统为您输入了一条默认消息。 您可以使用它,也可以根据自己的喜好对其进行编辑。

编辑还原消息,突出显示默认消息

当您对还原消息感到满意时,保存文件并退出编辑器。 在 nano 中,您可以使用“Ctrl+O”和“Ctrl+X”执行此操作。

完成的还原操作,撤消整个提交

再次使用git log ,我们可以看到添加了一个新的提交,它撤消了还原提交的更改。

Git 瑞士军刀

显然, commit是最重要的 Git 命令之一。 它可以做很多事情,所以有很多东西要学。 掌握其较少使用的功能是值得花时间的。 当您需要纠正错误时——现在——您会庆幸自己提前做好了准备。

相关:如何使用 Git 合并