『现学现忘』Git后悔药 — 34、git commit --amend 命令( 二 )

我们可以看到:

  1. 第三次提交的massage改变了 。
  2. 看到第三次提交的commit-id由bd4fd48变成了69a9841
  3. 我们可以看到使用git commit --amend命令,表面上没有生成新的提交 , 只是进行了内容的追加 。但实际上通过git reflog命令查看历史提交记录 , 我们还是看到了,其实是新生成了一个commit 。
说明:
  1. 关于git commit --amend命令原理,往下看 。
  2. 关于如何修改更早提价的message,看后面的git rebase文章 。
(2)场景二场景描述:
假设新接到需求,需要基于master分支拉取一个feature分支,且这个feature分支只有你自己使用(这一点极其重要),由于开发周期较长,你不想每一次提交都产生一个新的commit,而是想每一次commit都修改前一次提交(一直追加提交) 。
这样做的好处是,等到你的feature分支提测时,就只有一个干净的commit,没有乱七八糟的提交历史,你只要把这一个commit合并到master里就好了。
操作步骤:
在feature分支上:
  • 第1次提交代码时,使用命令git commit -a -m "第1次提交的注释"进行提交 。
  • 第2次以及只后的提交,使用命令git commit --amend -m "这里填写提交的注释"进行提交 。这样整个分支可以只有一个commit 。
示例:
不推荐这样操作 , 多次提交可以使你选择撤销的余地比较多,简化提交次数是比较好的想法 , 但更推荐使用git rebase命令进行操作 。
这里就不演示了 。
3、git commit --amend 命令原理git commit --amend这个命令给人的感觉 , 是用新提交的数据,追加到了前一个commit上 。
其实git commit --amend命令底层原理如下:
前提:你把遗漏提交的文件,或者修改的文件先提交到暂存区 。
  1. git reset --soft HEAD^:回退一个版本,且工作区和暂存区中的内容不会退 。
  2. git commit -c ORIG_HEAD:提交操作 。在根据此时的暂存区生成一个新的提交对象,代替原来提交的位置 。说明:-C <commit>,全称--reuse-message=<commit>:获取现有的提交对象 , 并在创建提交时重用现有提交对象的日志消息和作者信息(包括时间戳) 。-c <commit>,全称--reedit-message=<commit>:与-C类似 , 但是-c会调用编辑器,以便用户可以进一步编辑提交消息 。
看如下图示:
假设master分支上的提交历史如下图:
『现学现忘』Git后悔药 — 34、git commit --amend 命令

文章插图
运行git commit --amend命令 , 过程如下:
『现学现忘』Git后悔药 — 34、git commit --amend 命令

文章插图
参考:
  • https://blog.csdn.net/zxr97570912/article/details/108085873
  • https://www.cnblogs.com/chaoguo1234/p/5331586.html
【『现学现忘』Git后悔药 — 34、git commit --amend 命令】

推荐阅读