Git命令(向仓库中添加 commit)
git add
git add
命令用于将文件从工作目录移到暂存区,可接受多个文件名(用空格分隔)。
$ git add <file1> <file2> … <fileN>
要将所有文件提交到仓库中,首先需要将这些文件从工作目录移到暂存区
。我们将使用 git add 命令将这三个文件移到暂存区。
运行 git add
命令没有任何输出(同样也没有错误),我们可以通过 git status
来查看添加的文件发生了什么变化。
Changes to be committed
区域显示了位于暂存区的文件
!目前只显示了 index.html 文件,因此暂存区只有这个文件。
git rm --cached <file>...
,不会破坏任何属于你的文件,它只是从暂存区删掉了文件。
git add .
其中的 .
指代当前目录,可以用来表示所有文件和目录(包括所有嵌套文件和目录!)。使用该命令可以暂存剩余的文件。
git commit
为了进行确认,我们需要在提交 commit 之前再次快速运行下 git status
,以确保项目是我们预期的状态。
配置代码编辑器
$ git config --global core.editor <your-editor's-config-went-here>
git commit
命令会取出暂存区的文件并保存到仓库中,该命令将打开配置中指定的代码编辑器
,在代码编辑器中:
- 必须提供提交说明
- 以
#
开头的行是注释,将不会被记录 - 添加提交说明后保存文件
- 关闭编辑器以进行提交
然后使用 git log
检查你刚刚提交的 commit!
这里我将通过命令 git config –global core.editor vim
设置 Git 的默认编辑器为 vim。然后在 git commit
命令后会进入 vim 编辑器:
在该编辑器中我们需要掌握一些命令:
- vim 编辑器中,按
i
进入编辑模式
; - 按
Esc
回到锁定模式
; - 锁定模式下按
:
进入命令模式
; - 命令模式下输入
quit
不保存退出write
保存不退出wq
保存退出。
在编辑模式下命令:
- 快速定位到当前段落(编辑内容区域)开头:
{
; - 快速定位到当前段落结尾:
}
; - 复制一段文本,并粘贴:复制:y(yank);粘贴:p(paster);
- 删除几行:删除
dd
,删除 N 行:光标所处行输入Ndd
,删除包括光标所处行以下的三行; - 快速翻页:上翻页:
ctrl+b
,下翻页:ctrl+f
,上翻半页:ctrl+u
,下翻半页:ctrl+d
; - 查找某个字符串:查找第一个出现该字符串的地方:
/
+字符串
,然后回车;
查找最后一个该字符串出现的地方:?
+字符串
,然后回车; - 移动光标:
k
:上;j
:下;h
:左;l
:右; - 移动多行:
nk
:向上移动 n 行;nh
:向左移动 n 列;j 和 l 类似; - 到最开头:
gg
; - 到最后一行:
shift
+g
; - 缩进和删除缩进:缩进:
shift
+>
+>
删除缩进:shift
+<
+<
;
现在保存文件并关闭编辑器窗口(wq
),回到终端:
关闭代码编辑器后的终端,显示了新 commit 的 SHA 以及关于该 commit 的信息。例如被添加的文件以及添加了多少行代码。
使用 -m
选项绕过编辑器
如果你要编写的提交说明很简短,不想等打开代码编辑器后再输入信息,可以直接在命令行中使用 -m
选项传入信息:
$ git commit -m "Initial commit"
在上述示例中,文本”Initial commit”被作为提交说明信息。但是注意,不能为 commit 提供信息的描述(description),只能提供信息部分(message)
。
我们使用 git add 向暂存区添加了新建的文件
,同样的,我们也能使用同一命令将修改的文件暂存
。
commit 中应该包含什么内容?
关键在于使每个 commit 都有其侧重点。每个 commit 应该记录一项更改。这种说法可能比较主观(完全没问题),但是每个 commit 应该只对项目的一个方面做出更改。
良好的提交说明
在编写好的提交说明时,需要注意以下几个事项:
建议
- 消息篇幅简短(少于 60 个字符)
- 解释提交的作用(不是如何更改或为何更改!)
禁忌
- 请勿解释为何做出了这些更改
- 请勿解释如何进行了更改
- 请勿使用单词”and”
- 如果你必须使用 “and”,则你的提交说明可能进行了太多的更改,将这些更改拆分为独立的 commit
最重要的是,在编写提交说明时保持一致性!
解释原因
在编写提交说明时,第一行是消息本身。消息之后空一行,然后输入正文或说明,包括关于为何需要该 commit 的原因详情(例如 URL 链接)。提交说明的详情描述部分包含在 git log
中。
具体样式要求可以参考 git 提交说明样式指南
get diff
git status
将告诉我们哪些文件更改了,但是不会显示到底是什么样的更改。git diff
命令用来查看已经执行但是尚未 commit 的更改
。
如上图所示,git diff
命令会显示:
- 已经修改的文件
- 添加/删除的行所在的位置
- 执行的实际更改
为 git 添加忽略文件
.gitignore
文件用来告诉 git 不应跟踪的文件。该文件应该放在 .git
目录所在的目录。
通配符
允许你使用特殊的字符来表示某些格式/字符。在 .gitignore 文件中,你可以使用:
- 空白行作为空格
-
#
- 将行标记为注释 -
*
- 与 0 个或多个字符匹配 -
?
- 与 1 个字符匹配 -
[abc]
- 与 a、b 或 c 匹配 -
**
- 与嵌套目录匹配 -a/**/z
与以下项匹配(a/z,a/b/z,a/b/c/z)