提交

只有已暂存的内容才会被提交,在提交之前随时可以撤下。我们应当经常使用 git status 命令检查当前文件状态。

1 命令

git commit -m "about this commit"

仅输入提交命令 git commit 时,默认启动文本编辑器 vim 或 emacs 。文本编辑器允许更换,但可能导致提交出错,对于有格式要求的提交信息,建议在别处写好后复制到 GUI 中。

Git 中所有数据在存储前都会计算校验和,计算校验和的机制叫做 SHA-1 散列。检校和是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串,基于 Git 中文件的内容或目录结构计算出来,比如每次提交所生成的 commit id 就是一个典型的检校和: 24b9da6552252987aa493b52f8696cd6d3b00373 。实际上只要前 4 个字符没有歧义,就能获得那次提交。

提交内容尽可能高内聚低耦合。严禁行首空格制表符混搭、行尾空格、行尾制表符等空白错误, 空白错误在 git gui 中会高亮预警。

提交信息越全越好。第一行作为标题,剩下的作为正文,空行分隔。

2 历史

查看提交历史的基本命令是 git log。选项 -- 能筛选出关于某某文件的提交,选项 -S 能筛选出关于某某内容的提交。 gitk 相当于 git log 的可视化版,更加直观。

git log -Sfunction_name
gitk -- file_name

一次完整的提交是一连串修订补丁的列表。除头一个外,其他修订补丁都在提交时附加 --amend 选项。

$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

3 标签

Git 可以给历史中的任意一个提交打上标签。这个功能通常来标记发布节点。标签有 lightweight 和 annotated 两种,后者会记录该标签是何人何时打的,而前者不会。

$ git tag lightweight_tagname
$ git tag -a annotated_tagname 9fceb02 -m "about this tag"
$ git tag --list

4 抵消

git revert 的本质是用相反的内容抵消想要回滚的提交。

在后面的章节中,我们还会介绍其它回滚途径。