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
仓库。
如果我们执行了下面的命令,会发生什么呢?
git commit -am "C2"
我们可以一看到,我们执行了上述命令后,在C1
下面多了一个C2
的提交记录,并且我们本地分支的指针main
也随之下移到了C2
处。C2
的父节点是 C1
,父节点是当前提交中变更的基础。换句话来说,C2
是在C1
的基础上产生的变更。