关于git commit 命令解读
作者:辰风沐阳
1. git commit 介绍
git commit 命令用于将工作区内容或暂存区内容提交到版本库
本文记录 git commit 的常见用法,日常开发中,这几个参数足够使用了
# 将暂存区内容提交到版本库, 进入 vi 命令界面输入提交信息 git commit # 将某些已被跟踪的文件提交到版本库(包含工作区和版本库) git commit [file1] [file2] [...] # 将暂存区内容提交到版本库, 无需进入 vi 命令界面输入提交信息 git commit -m [message] # 跳过 git add, 将所有已被跟踪的文件更改提交到版本库 git commit -am [message] # 使用一次新的commit, 替代上一次提交 # 如果代码没有任何新变化, 则用来改写上一次commit的提交信息 git commit --amend -m [message]
2. git commit 使用
将所有暂存区文件提交到版本库,进入 vi 命令页面输入提交信息
git commit
将所有已被 git 跟踪的文件提交到版本库 (包含工作区和暂存区),进入 vi 命令页面输入提交信息
git commit [file1] [file2] [...]
3. git commit -m
最常见的用法如下所示,如果没有 -m 参数,会进入 vi 编辑模式,然后写入提交信息
git commit -m [message]
将某些文件提交到版本库,可以跳过 git add,但必须是已被跟踪的文件
git commit [file1] [file2] -m [message]
4. git commit -am
如果需要将所有已被跟踪的文件更改内容,不想使用 git add,直接添加到版本库
总结: git commit -m 用于提交暂存区中的文件,git commit -am 用于提交已被跟踪的文件
# 将已被跟踪的文件提交的本地库中 git commit -am <message>
commit 命令的 -am 参数等价于执行了下面两个命令
# 将已被跟踪的文件提交到暂存区 git add -u # 将暂存区中的文件提交到本地库 git commit -m <message>
5. git commit --amend
在日常开发中,难免会出现提交时备注信息打错了,想要修改它。
# 进入 vi 编辑模式,最上方就是提交时填写的备注信息 git commit --amend # 无需进入 vi 编辑模式,修改上次提交记录的备注信息 git commit --amend -m <message>
修改备注信息后,保存退出即可。
该操作会修改上次提交的索引 id
6. commit 多行提交信息
提交信息大多数人都是使用一行,有时改动内容会比较多,三言两语很难表示清楚,可以使用换行更好的描述改动内容
多行提交信息内容:第一行内容代表是标题,从第二行开始都是内容,以下面多行提交信息为例:
fix:用户模块、购物车模块
- 1、修复用户无法注册功能
- 2、修复购物车商品批量删除报错问题
- 3、修复积分商城支付成功后订单状态没有改变问题
下面是多行提交信息在当前主流代码托管平台上的显示效果
提交多行提交信息的方法:
方法 1(进入 vi 模式输入多行提交信息):
# 进入 vi 命令界面 git commit # 按下 i,进入 vi 的插入模式,将下面内容粘贴进入后,输入 :wq 回车即可 fix:用户模块、购物车模块 1、修复用户无法注册功能 2、修复购物车商品批量删除报错问题
方法 2(命令行输入多行提交信息):
# 第一步:输入第一行 git commit -m "fix:用户模块、购物车模块 # 第二步:按下回车输入第二行、按下回车输入第三行 ... 1、修复用户无法注册功能 # 第三步:多行提交信息输入结束,尾部加上引号,回车完成提交操作 2、修复购物车商品批量删除报错问题"
方法 3(粘贴提前写好的提交命令)【推荐】:
提前在文本编辑器中写好准备执行的提交命令,复制粘贴到命令行中执行即可,如下所示:
git commit -m "fix:用户模块、购物车模块
- 1、修复用户无法注册功能
- 2、修复购物车商品批量删除报错问题
- 3、修复积分商城支付成功后订单状态没有改变问题
7. commit 背后到底发生了什么
创建一个 git 仓库,用于测试 git commit 背后做了什么操作
echo 'hello git' >> 1.txt echo 'hello svn' >> 2.txt git init git add . # 提交到版本库,注意 .git 目录下的变化 git commit -m 'add 1.txt 2.txt'
一、执行 git commit 后会在 .git/objects
目录中下面生成两个文件(一个是 commit 类型,一个是 tree 类型)
第二次执行 commit 后,查看这次 commit id 的文件内容,其中 parent
后面的值是上一次提交记录的 commit id
当文件存放在目录中时,tree 类型的 objects 文件中还会有一个 tree(新增了一个 user/4.txt 文件)
二、当前在 master 分支,那么执行 git commit 后会在 .git/refs/heads/master
中写入最新提交记录的 commit id
$ cat .git/refs/heads/master f08f522f3210eccbcff1d5e16c3da72435583f5e
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。