git commit,启动文本编辑器
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,启动文本编辑器的更多相关文章
- windows下git commit使用gvim编辑器
安装gvim 下载安装包:ftp://ftp.vim.org/pub/vim/pc/gvim80-586.exe 安装后将安装路径添加到环境变量Path中 设置编码支持中文 在安装路径下的_vimrc ...
- 将git commit的默认编辑器从nano转为vim
修改系统的配置 git config --global core.editor vim 针对 git 项目修改 .git/config core 中添加 editor=vim
- 修改git commit默认触发的编辑器
使用git commit会自动启动编辑器编辑本次提交的comment,git默认配置是GNU nano,但是很多人不是很熟悉(我就是),其实这个是可以自行配置的. 编辑制定代码库的.git/confi ...
- git commit --amend
任何时候,你都有可能需要撤消刚才所做的某些操作.接下来,我们会介绍一些基本的撤消操作相关的命令.请注意,有些撤销操作是不可逆的,所以请务必谨慎小心,一旦失误,就有可能丢失部分工作成果. 有时候我们提交 ...
- git commit 时出现:please enter the commit message for your changes
每次准备提交前,先用 git status 看下,是不是都已暂存起来了,然后再运行提交命令 git commit: $ git commit 这种方式会启动文本编辑器以便输入本次提交的说明.(默认会启 ...
- github 使用“git commit -m"命令时候出现的一个小问题
git commit -m 使用问题 今天提交文件到github,步骤是: git add abc.py (abc.py是我当前随意写的一个文件名) git commit -m 'add codes ...
- git命令——git commit
功能 将暂存区中的更改记录到仓库. 加到staging area里面的文件,是表示已经准备好commit的.所以在commit修改之前,务必确定所有修改文件都是staged的.对于unstaged的文 ...
- [译]git commit --amend
git commit --amend命令用来修复最近一次commit. 可以让你合并你缓存区的修改和上一次commit, 而不是提交一个新的快照. 还可以用来编辑上一次的commit描述. 记住ame ...
- git学习------>git commit命令的默认编辑器的修改
今天在新同事的电脑上,用git commit命令帮新同事提交代码的时候,编辑完commit的信息后,居然不记得怎么退出了.蛋疼. 后来百度了一下,原来此时是进入GUN nano编辑器.在这里可以添加你 ...
随机推荐
- 使用CodeSmith编写ADO.Net三层
说明 自本文发布日起,发现和完善了编写的CodeSmith几处代码. 故,不再直接在文章添加代码,最新代码参见GitHub https://github.com/catbiscuit/CodeSmit ...
- Excel 冻结窗口
1.冻结前五行 鼠标选中第六行,点击视图----> 冻结窗口 ----> 冻结拆分窗口 2.冻结第一列窗口 鼠标选中第1列,点击视图----> 冻结窗口 ----> 冻结首列窗 ...
- 5.innodb B+tree索引
索引基础 索引是数据结构 1.图例 2.B+tree 特征 1.非叶子节点不保存数据,只用来索引,数据都保存在叶子节点 2.查询任何一条数据,查询的索引深度都是一样的 3. B+ 树中各个页之间是通过 ...
- 敏捷史话(一):用一半的时间做两倍的事——Scrum之父Jeff Sutherland
普通的人生大抵相似,传奇的人生各有各的传奇.Jeff就是这样的传奇人物,年近80的他从来没有"廉颇老矣尚能饭否"的英雄迟暮,不久前还精神矍铄地与好几百名中国学生进行线上交流,积极回 ...
- Mybatis 动态sql if 判读条件等于一个数字
在Mybatis中 mapper中 boolean updateRegisterCompanyFlag(@Param(value = "companyId") String com ...
- Promise是如何实现异步编程的?
Promise标准 不能免俗地贴个Promise标准链接Promises/A+.ES6的Promise有很多方法,包括Promise.all()/Promise.resolve()/Promise.r ...
- 访问需要HTTP Basic Authentication认证的资源的c#的实现
string username="username"; string password="password"; //注意这里的格式哦,为 "usern ...
- MongoDb学习(四)--Repository----语法关键字
表7.查询方法支持的关键字 关键词 样品 逻辑结果 After findByBirthdateAfter(Date date) {"birthdate" : {"$gt& ...
- java连接mongodb数据库
最近毕设需要用到这个数据库.然而又不会,没办法,只能上网学习学习. 记录一下java连接mongodb数据库的简单方法.这里只是记录一下学习.熟悉一下CURD方法. 但是毕业用到的是SpringBoo ...
- kill的使用
Linux中Kill进程的N种方法 (2011-12-23 17:27:59) 转载▼ 标签: 杂谈 分类: ubuntu系统操作 常规篇: 首先,用ps查看进程,方法如下: $ ps -ef -- ...