git commit中输入message的几种方式 - 简书 https://www.jianshu.com/p/ad461b99e860

在所有的git教程里,git commit肯定是一开始就会提到的命令。一般情况下每个commit都会有一段commit log message。message可能有一行内容,可能有多行内容,中间可能会有空白行。在第一个空白行前面的部分称为subject,之后的部分称为body。subject和body在git log或者git show的输出format中分别可以用%s和%b获得,也可以用%B同时获得subject和body,等价于%s%b。在进行项目开发的时候,事先约定好message的格式并且让大家都遵守这个约定,是比较好的做法。在用git commit生成一个commit的时候,message的输入方法有很多种:

1. 最常见的做法是用-m <msg>参数,等价于--message <msg>。在message只有一行内容时,用这种方式比较方便,但如果要输入很多行的话,就不是那么方便了。

git commit -m 'hello world'

2. 第二种做法是什么参数都不要带,直接就用git commit。这会启动文本编辑器,打开.git/COMMIT_EDITMSG,在里面输入想要的message,然后保存退出就可以了。这种方式非常自由灵活,想要什么输入什么。

git commit

3. 人总是趋向于偷懒的,每次都要手动输入一堆东西肯定嫌烦。那有没有办法可以利用现有资源呢?git commit提供了一个-c <commit>,等价于--reedit-message=<commit>,还有个差不多的-C <commit>,等价于--reuse-message=<commit>。这种做法会重用<commit>的message,将其原封不动地利用起来,只要是当前git中已经存在的commit就可以,不存在的话可以先从其他地方fetch过来。-c,reedit,会启动文本编辑器,让用户可以重新编辑;-C,reuse,不给用户重新编辑的机会,相当于-c <commit> --no-edit。重用是很方便,但这种做法不仅仅重用了message,连author和date也一起重用了,除了commit id不一样,其他都一样,一看就是抄来的。所以我们最好再加上--reset-author参数,这么做会使用当前的author和date。

git commit -c HEAD --reset-author

4. git commit还提供了从文件中读取message的方法,-F <file>,等价于--file=<file>。这不会启动文本编辑器,直接将<file>中的内容全部拿过来当作message,包括以#开头的行。本来.git/COMMIT_EDITMSG中以#开头的行都算是注释,不会被添加到message中去的。这时我们再用git commit --amend,什么都不改,保存退出的话,那么以#开头的内容就都从message中消失了。<file>可以是标准输入,用“-”来表示。譬如echo "hello world" | git commit -F -。

echo "hello world" > hw && git commit -F hw

5. git commit中并没有像-c和-C那样提供一个-f <file>来让用户reedit这个file,而是用了-t <file>,等价于--template=<file>。这会启动文本编辑器,已有的内容是<file>中的内容,用户可以进行编辑之后保存退出。用户如果没有做什么修改的话,或者修改完后内容没变的话,commit不会成功。如果想要偷懒一点的话,可以用git config设置下commit.template,给其指定这个template file,指定完以后就不用每次都输入-t <file>了。如果用了-c,-C或者-F的话,那么-t <file>和commit.template是不会起作用的。template的方式比较适合用于事先约定好message格式的场景,把格式的固定内容都放在template中,用户commit的时候把其余部分填写完整就可以了。

echo "hello world" > hwt && git commit -t hwt

6. 如果懒得什么message都不想写!那用--allow-empty-message就可以了,但你确定要这么做吗?

echo "I am a git" && git commit --allow-empty-message --no-edit

7. 如果你拒绝使用--allow-empty-message,但又不想写commit log message的话,那就安静地做个integrator吧。用git merge,git rebase,git cherry-pick,git am,都是体贴你的小棉袄,但一定要拒绝git apply,因为它会要你写message的。

8. 亲手试一下每种方式吧!如果觉得每次要做点修改或者新增个文件才能add、commit很麻烦的话,那就加上--allow-empty吧,什么文件都不用改,也不用git add,直接就可以commit了!如果不想在尝试的时候生成一长串无用的commit的话,那在有root commit的情况下再加上个--amend吧,改来改去都只有一个commit。

echo "I love git" && git commit --allow-empty --amend

 
 

git commit,启动文本编辑器的更多相关文章

  1. windows下git commit使用gvim编辑器

    安装gvim 下载安装包:ftp://ftp.vim.org/pub/vim/pc/gvim80-586.exe 安装后将安装路径添加到环境变量Path中 设置编码支持中文 在安装路径下的_vimrc ...

  2. 将git commit的默认编辑器从nano转为vim

    修改系统的配置 git config --global core.editor vim 针对 git 项目修改 .git/config core 中添加 editor=vim

  3. 修改git commit默认触发的编辑器

    使用git commit会自动启动编辑器编辑本次提交的comment,git默认配置是GNU nano,但是很多人不是很熟悉(我就是),其实这个是可以自行配置的. 编辑制定代码库的.git/confi ...

  4. git commit --amend

    任何时候,你都有可能需要撤消刚才所做的某些操作.接下来,我们会介绍一些基本的撤消操作相关的命令.请注意,有些撤销操作是不可逆的,所以请务必谨慎小心,一旦失误,就有可能丢失部分工作成果. 有时候我们提交 ...

  5. git commit 时出现:please enter the commit message for your changes

    每次准备提交前,先用 git status 看下,是不是都已暂存起来了,然后再运行提交命令 git commit: $ git commit 这种方式会启动文本编辑器以便输入本次提交的说明.(默认会启 ...

  6. github 使用“git commit -m"命令时候出现的一个小问题

    git commit -m 使用问题 今天提交文件到github,步骤是: git add abc.py (abc.py是我当前随意写的一个文件名) git commit -m 'add codes ...

  7. git命令——git commit

    功能 将暂存区中的更改记录到仓库. 加到staging area里面的文件,是表示已经准备好commit的.所以在commit修改之前,务必确定所有修改文件都是staged的.对于unstaged的文 ...

  8. [译]git commit --amend

    git commit --amend命令用来修复最近一次commit. 可以让你合并你缓存区的修改和上一次commit, 而不是提交一个新的快照. 还可以用来编辑上一次的commit描述. 记住ame ...

  9. git学习------>git commit命令的默认编辑器的修改

    今天在新同事的电脑上,用git commit命令帮新同事提交代码的时候,编辑完commit的信息后,居然不记得怎么退出了.蛋疼. 后来百度了一下,原来此时是进入GUN nano编辑器.在这里可以添加你 ...

随机推荐

  1. Windows锁定屏幕然后关闭显示器,可执行程序

    有时候我们需要关闭屏幕来休息一下或者在本上写东西,但是屏幕亮着的时候会分心,但是关闭显示器又太麻烦了,所以直接来一个小程序(非微信小程序).还有一种情况,有时候晚上要离开电脑旁了,但是电脑还在做事情, ...

  2. phaser3入门教程-从零开始开发一个打砖块游戏

    项目代码 项目代码 体验一下 空格开始,左右箭头控制移动 体验一下 Phaser简介 Phaser是一个HTML5游戏框架.它使用了许多HTML5 API,例如Canvas,WebGL,Audio,G ...

  3. Linux嵌入式学习-USB端口号绑定

    由于ubuntu USB设备号为从零开始依次累加,所以多个设备每次开机后设备号不固定,机器人每次开机都要蛋疼的按顺序插, 在网上找到一种方法:udev的规则 udev的规则说明,可以参考博客说明:ht ...

  4. JavaDailyReports10_18

    学习内容:HTML基本知识 1.通常标记具有默认属性,当一个标记中只有标记名时,使用默认属性. 2.HTML标记有两种:单标记和双标记,单标记的语法格式:  <标记名称/> 3.不同的属性 ...

  5. Spring boot启动时报 java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long错误

    Spring boot启动时报 java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be ...

  6. FAAS -- Serverless

    FAAS概念,无服务器运算,功能即服务,function-as-a-service 初创企业-大型企业.民间组织-政府机构 ===>>>> 上云 云计算第三代技术 -- Ser ...

  7. BCC和libbpf的转换

    BCC和libbpf的转换 本文讲述如何将基于BCC的BPF应用转换为libbpf + BPF CO-RE.BPF CO-RE可以参见上一篇博文. 为什么是libbpf和BPF CO-RE? 历史上, ...

  8. NVL函数:空值转换函数

    NVL(表达式1,表达式2) 如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值. 该函数的目的是把一个空值(null)转换成一个实际的值.其表达式的值可以是数字型.字符型和日期型. ...

  9. python之shutil 模块

    一.shutil 高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中 import shutil s ...

  10. postgresql-从表中随机获取一条记录

    目录 postgresql如何从表中高效的随机获取一条记录 随机获取一条记录random() 改写1 改写2 改写3 对比 注意 结语 postgresql如何从表中高效的随机获取一条记录 selec ...