命令说明
amend命令是修改最后一次提交。也就是在不增加新的commit情况下,将修改的代码添加到上一次commit中。
git commit —amend
- 快照保持不变,只是修改了提交修改.
提交后发现一些内容还需要修改,可以将文件添加到暂存区,然后使用git commit —amend命令进行追加提交。
常用参数
—no-edit:使用选定的提交信息,不进行编辑。(追加提交,且不修改message信息)
- —reset-author:加载提交用户信息
—author=:可修改git的author和email信息:git commit —amend —author=’shenshuai89@qq.com’
使用场景
开发过程中,代码已经提交到了本地仓库【还没push到远程】。发现提交的代码有问题,需要修改后再次提交,此时希望达到的目的:
修改有问题的代码
- 补足漏提交的文件
- 把修改内容和前一次提交的代码合并成一个提交
- 结合后的提交添加新的注释
这时就可以使用git commit —amend命令
操作步骤:
- 修改问题代码
- 执行
git add .
命令将漏提交的文件加入暂存区 - 执行git commit —amend -m “new commit message”命令进行提交
本地创建测试文件,新建readme.txt文件
# 执行如下操作提交
shuais-MacBook-Pro:amend shuai$ git log --oneline
65a7463 (HEAD -> master) 第三次提交内容
a7a2ad0 第二次提交内容
6257f8a 第一次提交的内容
# 使用reflog查看 提交历史记录
shuais-MacBook-Pro:amend shuai$ git reflog
65a7463 (HEAD -> master) HEAD@{0}: commit: 第三次提交内容
a7a2ad0 HEAD@{1}: commit: 第二次提交内容
6257f8a HEAD@{2}: commit (initial): 第一次提交的内容
# 编辑修改内容后,将内容添加到暂存区
shuais-MacBook-Pro:amend shuai$ git add .
# 使用amend作为参数进行提交
shuais-MacBook-Pro:amend shuai$ git commit --amend -m "第三次提交内容,添加three"
[master 7b5ebb5] 第三次提交内容,添加three
Date: Thu Jun 23 23:57:11 2022 +0800
1 file changed, 2 insertions(+), 1 deletion(-)
# 查看提交后的历史记录
shuais-MacBook-Pro:amend shuai$ git log --oneline
7b5ebb5 (HEAD -> master) 第三次提交内容,添加three
a7a2ad0 第二次提交内容
6257f8a 第一次提交的内容
# 使用reflog查看 提交历史记录,65a7463这次提交的记录,在log中是看不到的
shuais-MacBook-Pro:amend shuai$ git reflog
7b5ebb5 (HEAD -> master) HEAD@{0}: commit (amend): 第三次提交内容,添加three
65a7463 HEAD@{1}: commit: 第三次提交内容
a7a2ad0 HEAD@{2}: commit: 第二次提交内容
6257f8a HEAD@{3}: commit (initial): 第一次提交的内容
将最后一次的提交记录,有65a7463变为了7b5ebb5。通过log查看时,只有3次提交记录;使用reflog可以查看到被隐藏掉的 65a7463 记录。
amend命令原理
git commit --amend
用新的提交数据,追加到前一个commit上。
底层原理如下:
- git reset —soft HEAD^ :回退一个版本,并且工作区和暂存区的内容不回退
- git commit -c ORIG_HEAD: 提交操作,根据此时暂存区内容生成一个新的提交对象,替换掉原来的提交位置
- -C
: 获取现有的提交对象,并在创建提交时重用现有提交对象的日志消息和作者信息等 - -c
: 与-C类型,但是-c会调用编辑器,重新编辑提交信息
- -C
相当于:先执行了git reset —soft HEAD^命令退回到commit2,然后依据此时的暂存区内容生成新的commit-4提交,替换原来的commit-3的位置。
原来的commit3,使用reflog还可以被查看到