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. 微信小程序--每周图书推荐

    这是我个人的第一个原生微信小程序,作为一枚萌新,自己没有前端经历,所以代码很混乱,界面很简单,难度也很低,主要用来记录自己学小程序过程中遇到的问题. 一. 先上预览图 左右滑动切换每周推荐的图书,点击 ...

  2. 在 xunit 测试项目中使用依赖注入

    在 xunit 测试项目中使用依赖注入 Intro 之前写过几篇 xunit 依赖注入的文章,今天这篇文章将结合我在 .NET Conf 上的分享,更加系统的分享一下在测试中的应用案例. 之所以想分享 ...

  3. JIRA 知多少:聊一聊 Android Studio 、工作流相关设置

    Android Studio 相关 配置 JIRA 服务器 如果细心的话会发现有一个选项卡:Commit Message.这一段代码是不是有点熟悉呢?你没有猜错,这段代码就是 commit 模板,当你 ...

  4. Java中常见的json序列化类库 - Jackson

    Jackson 介绍 Jackson框架是基于Java平台的一套数据处理工具,被称为"最好的Java Json解析器". Jackson框架包含了3个核心库:streaming,d ...

  5. JAVA读取EXCEL_自动生成实体类

    代码实现PropertyAnno.java import java.lang.annotation.ElementType; import java.lang.annotation.Retention ...

  6. list转long[]数组

    //list转long数组List<Long> list = new ArrayList<>(); Long[] skuIds = list.toArray(new Long[ ...

  7. JAVA的一些笔记

    /*一般函数与构造函数的区别 构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化 一般函数:对象创建时,需要函数功能时才调用 构造函数:一个对象对象创建时,只调用一次 一般函数:对象创 ...

  8. 如何根据角色批量激活SAP Fiori服务

    我们知道Fiori的角色跟ERP的角色是不通用的,即使你的账号有SAP_ALL的权限,但打开Fiori的时候一样是空的一片: 只有给账号加上fiori需要的角色,并激活相关服务才能用fiori app ...

  9. ASP.NET Core路由中间件[1]: 终结点与URL的映射

    目录 一.路由注册 二.设置内联约束 三.默认路由参数 四.特殊的路由参数 借助路由系统提供的请求URL模式与对应终结点(Endpoint)之间的映射关系,我们可以将具有相同URL模式的请求分发给应用 ...

  10. ASP.NET Core路由中间件[2]: 路由模式

    一个Web应用本质上体现为一组终结点的集合.终结点则体现为一个暴露在网络中可供外界采用HTTP协议调用的服务,路由的作用就是建立一个请求URL模式与对应终结点之间的映射关系.借助这个映射关系,客户端可 ...