『现学现忘』Git后悔药 — 34、git commit --amend 命令 - 繁华似锦Fighting
source link: https://www.cnblogs.com/liuyuelinfighting/p/16798492.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
这是我们Git中的第三种后悔药。
1、git commit --amend
命令说明
git commit --amend
命令:也叫追加提交,它可以在不增加一个新的commit
的情况下,将新修改的代码追加到前一次的commit
中。
使用该命令的好处,是避免许多无用的提交。
说明:
- 如果自上次提交以来,你还未做任何修改(例如,在上次提交后马上执行了此命令),那么快照会保持不变(不产生新的
commit
),而修改的只是提交信息。 - 或者你提交后发现忘记了暂存某些需要的修改,可以将该文件添加到暂存区,然后在使用
git commit --amend
命令进行追加提交。
常用参数:
--no-edit
:使用选定的提交消息而无需启动编辑器。(追加提交,且不修改message
信息。)--reset-author
:加载提交用户的信息。
比如你从新配置本地用户的信息,然后使用该参数可以重新加载新用户的信息,并且更新在追加提交中。--author=
:可修改Git 的author
和email
信息。
示例:git commit --amend --author='xxx <[email protected]>'
2、使用场景
(1)场景一
场景描述:
开发代码已提交到本地版本库中,提交后发现这次提交的代码有问题,或者漏提交了一些文件,此时希望达到以下目的:
- 修改有问题的代码。
- 补足漏提交的文件。(一般是新增的文件没有
git add
) - 把以上两点相关的代码,和前一次提交的代码合并成一个提交。
- 给合并后的提交添加新的注释。
即:有时你提交过代码之后,发现一个地方改错了,你下次提交时不想保留上一次的记录,或者你上一次的commit message
的描述有误,这时候你可以使用 git commit --amend
命令来解决。
解决步骤:
- 修改问题代码。
- 执行
git add .
命令,把漏提交的文件加入暂存区。 - 执行
git commit --amend -m "这里填写提交的注释"
命令进行提交。
示例:修改最新一次提交的message
有的时候,我们刚刚进行一次提交,突然发现该提交的描述(message
)不是很准确。所以需要对该提交的message
进行修改(最近一次的commit
)。
1)首先查看当前分支的历史提交情况。
# 1.查看版本库历史提交 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/amend_test (master) $ git log --oneline bd4fd48 (HEAD -> master) 第3次提交,新增内容:git commit --amend v3 8b3a071 第2次提交,新增内容:git commit --amend v2 d3e2d8c 第1次提交,新增readme.txt文件 # 2.查看可回退历史提交信息。 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/amend_test (master) $ git reflog bd4fd48 (HEAD -> master) HEAD@{0}: commit: 第3次提交,新增内容:git commit --amend v3 8b3a071 HEAD@{1}: commit: 第2次提交,新增内容:git commit --amend v2 d3e2d8c HEAD@{2}: commit (initial): 第1次提交,新增readme.txt文件
2)修改最新一次历史提交记录。
最新一次历史提交记录,也就是第3次提交。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/amend_test (master) $ git commit --amend -m "我是第3次提交,重新修改的message" [master 69a9841] 我是第3次提交,重新修改的message Date: Tue Apr 20 17:41:44 2021 +0800 1 file changed, 1 insertion(+)
提示:如果此时有需要新增或改动的文件,可以先把文件添加都暂存区,然后随着
git commit --amend
命令,一起追加提交。
3)再次查看当前分支的历史提交情况。
# 1.查看版本库历史提交 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/amend_test (master) $ git log --oneline 69a9841 (HEAD -> master) 我是第3次提交,重新修改的message 8b3a071 第2次提交,新增内容:git commit --amend v2 d3e2d8c 第1次提交,新增readme.txt文件 # 2.查看可回退历史提交信息。 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/amend_test (master) $ git reflog 69a9841 (HEAD -> master) HEAD@{0}: commit (amend): 我是第3次提交,重新修改的message bd4fd48 HEAD@{1}: commit: 第3次提交,新增内容:git commit --amend v3 8b3a071 HEAD@{2}: commit: 第2次提交,新增内容:git commit --amend v2 d3e2d8c HEAD@{3}: commit (initial): 第1次提交,新增readme.txt文件
我们可以看到:
- 第三次提交的
massage
改变了。 - 看到第三次提交的
commit-id
由bd4fd48
变成了69a9841
- 我们可以看到使用
git commit --amend
命令,表面上没有生成新的提交,只是进行了内容的追加。但实际上通过git reflog
命令查看历史提交记录,我们还是看到了,其实是新生成了一个commit
。
- 关于
git commit --amend
命令原理,往下看。- 关于如何修改更早提价的
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
命令底层原理如下:
前提:你把遗漏提交的文件,或者修改的文件先提交到暂存区。
git reset --soft HEAD^
:回退一个版本,且工作区和暂存区中的内容不会退。git commit -c ORIG_HEAD
:提交操作。在根据此时的暂存区生成一个新的提交对象,代替原来提交的位置。
说明:-C <commit>
,全称--reuse-message=<commit>
:获取现有的提交对象,并在创建提交时重用现有提交对象的日志消息和作者信息(包括时间戳)。-c <commit>
,全称--reedit-message=<commit>
:与-C
类似,但是-c
会调用编辑器,以便用户可以进一步编辑提交消息。
看如下图示:
假设master
分支上的提交历史如下图:
运行git commit --amend
命令,过程如下:
__EOF__
Recommend
-
4
1、查看本地镜像 命令:docker images,列出本地宿主机上的镜像。 (1)命令说明 shell# 查看本地镜像 [root@192 docker]# docker images REPOSITORY TAG IMAGE ID CREATED...
-
5
1、分层的镜像 我们可以去下载一个镜像,注意观察下载的日志输出,可以看到Docker的镜像是一层一层的在下载。 思考:为什么Docker镜像要采用这种分层的结构呢? 最大的好处,我觉得莫过于是资源共享了! 比如有...
-
0
1、ONBUILD指令说明 ONBUILD是一个特殊的指令,它后面跟的是其它指令,比如 RUN, COPY 等,而这些指令在当前镜像构建时并不会被执行。以当前镜像为基础镜像,去构建下一级镜像的时候,才会执行ONBUILD后面的指令。 Dockerfile中的其它指令,都...
-
0
1、Git下载 进入官方地址下载Git客户端:https://git-scm.com/download/win 国内Git客户端镜像下载地址:[https://npm.taobao.org...
-
1
1、修改用户签名 其实很简单,就是重新执行git config命令,换个用户名和邮箱地址就可以了,新配置的内容会覆盖之前配置的内容,达到了用户签名的修改。 以系统用户为例: bash# 查看系统级别的用户配置 L@DE...
-
3
1、Git本地版本库结构 如下图所示: 工作区(Working Directory) 添加、编辑、修改、删除文件等操作。 暂存区(Stage) 打算提交,但还没提交的内容。最后可以统一提交到Git仓库中。也...
-
2
『现学现忘』Docker基础 — 39、实战:自定义Tomcat9镜像 以ContOS镜像为基础镜像,自定义一个tomcat9的镜像。 镜像可以正...
-
5
1、准备工作 Docker Hub地址:https://hub.docker.com/ (1)注册用户:
-
3
『现学现忘』Git后悔药 — 28、版本回退git reset --soft命令说明 git reset --soft commit-id命令:回退到指定版本。(soft...
-
4
『现学现忘』Git后悔药 — 30、版本回退git reset --hard命令说明 git reset --hardcommit-id命令:回退到指定版本。(hard...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK