0005-Git不完全操作指南之本地操作1——commit

24 阅读3分钟

Commit是啥?

在Git中,commit命令用来提交你的变更,生成一条提交记录。

Git 仓库中的提交记录保存的是你的目录下所有文件的快照,就像是把整个目录复制,然后再粘贴一样,但比复制粘贴优雅许多!

Git 希望提交记录尽可能地轻量,因此在你每次进行提交时,它并不会盲目地复制整个目录。条件允许的情况下,它会将当前版本与仓库中的上一个版本进行对比,并把所有的差异打包到一起作为一个提交记录。

Git 还保存了提交的历史记录。这也是为什么大多数提交记录的上面都有父节点的原因 。对于项目组的成员来说,维护提交历史对大家都有好处。

关于提交记录太深入的东西咱们就不再继续探讨了,现在你可以把提交记录看作是项目的快照。提交记录非常轻量,可以快速地在这些提交记录之间切换!

常用命令

我们要创建一个提交记录,经常会用到以下命令:

# 直接提交
git commit

# 注意,如果直接执行上述命令,没有额外加任何参数,由于Git需要我们对本次提交进行一定的描述
# 方便查阅,因此通常会弹出一个如vim的编辑器,你可在其中输入本次提交的内容,如:
# feat: 新增了XXX功能

# 提供提交信息
git commit -m "feat: 新增了XXX功能"

# 上述命令实际上等效于第一条命令的操作,只不过明确指定了提交信息,就不需要额外打开编辑器输入

# 对已经纳入版本跟踪的文件提交前自动加入到暂存区(相当与同时实现了git add的操作,不过
# 对于没有纳入版本跟踪的新增文件无效,新增文件必须显示使用git add才能加入到版本跟踪)
git commit -am "feat: 新增了XXX功能"

# 修改上一次未push的本地提交的message
git commit --amend "fix: 修复XXX问题"

# 上述命令将会把上一次提交的信息从"feat: 新增了XXX功能"改为“fix: 修复XXX问题”

图示

了解了常见命令,我们来看一下,执行了commit之后,我们的git到底发生了什么变化。首先,下面是一个虚拟的git仓库。

commit1

如果我们执行了下面的命令,会发生什么呢?

git commit -am "C2"

commit2

我们可以一看到,我们执行了上述命令后,在C1下面多了一个C2的提交记录,并且我们本地分支的指针main也随之下移到了C2处。C2 的父节点是 C1,父节点是当前提交中变更的基础。换句话来说,C2是在C1的基础上产生的变更。