git防遗忘指南-amend修改最近一次commit记录

前言

上一篇git的文章聊到了git版本管理的commit和分支相关的内容,通过查看./git文件内的文本内容,可以有个更清晰的认识

  • git版本管理的主要内容就是一次次的commit提交

  • 分支的本质就是记录了当前指向的commit的哈希值

  • 会有一个HEAD指针去指向当前工作的位置,HEAD指针可以挂载在分支,也可以脱离分支直接指向一个commit提交

  • 查看log可以看到commit如果有被引用关系,后面会有()去显示相关的引用关系

commit原则上是一次次向后推进的,通过移动HEAD指针可以从任意的commit去延伸提交记录链,分支仅仅只是一个指针,有了这样的认知,管理分支其实就是为了让commit提交记录更加的好看,可以通过查看历史快速的了解到具体的改动内容

问题

为了commit记录的整洁,那么如果当一次commit已经提交,发现内容有错误或者想要修改commit的内容介绍又该怎么操作?

commit提交有错误,可以修改对应的错误后,再产生一次新的commit去覆盖,这样不会影响整个分支的正确性,只是查看历史的时候会有两个commit记录是做了同一功能,这样会产生多余的提交记录,不够整洁

这个时候commit --amend参数就可以派上用途了

--amend

在使用commit提交的时候,如果加上--amend参数就可以对最近的一次commit进行修改,可以修改commit提交的内容简介,也可以在当前commit的提交的基础上继续修改后提交,这样就会让提交记录上不会产生多余的一次提交

直接看例子,以一个单文件的修改进行举例

//在master分支上进行了3次提交
commit 746cad0229904535b3c1213235f4a75a1d7ef0fa (HEAD -> master)
Date:   Fri Sep 23 09:33:52 2022 +0800

    add 2

commit ef8abe2301688429c4facf978df245a90aa20a01
Date:   Fri Sep 23 09:33:13 2022 +0800

    add 1

commit b1a51914f09bb7f0e5bb4e1b5b32d2d657939936
Date:   Fri Sep 23 09:32:31 2022 +0800

    first commit

//这个时候想要修改最近的一次提交内容,将add 2改为 add 2 amend,可以直接使用
>>> git commit --amend 
//接着在vi操作里面将内容改为 add 2 amend,
>>> git log
commit 7539bae343faade6b4d3275abc35d13315382e28 (HEAD -> master)
Date:   Fri Sep 23 09:33:52 2022 +0800

    add 2 amend

commit ef8abe2301688429c4facf978df245a90aa20a01
Date:   Fri Sep 23 09:33:13 2022 +0800

    add 1

commit b1a51914f09bb7f0e5bb4e1b5b32d2d657939936
Date:   Fri Sep 23 09:32:31 2022 +0800

    first commit

可以看到通过commit --amend可以直接修改提交的内容介绍,查看log日志可以看出,前两次的提交commit对应的哈希值是没变的,但是新产生的提交记录的哈希值被改变了


产生了新的提交记录.png

除了修改提交的文本介绍,还可以直接对commit提交后的内容再修改提交

//在当前的基础上,再新增一次提交,增加内容 add content 3
commit 8a17126665a728a5bfe98d24b3eb29c082f5e4a1 (HEAD -> master)
Date:   Fri Sep 23 09:35:00 2022 +0800

    add 3

commit 7539bae343faade6b4d3275abc35d13315382e28
Date:   Fri Sep 23 09:33:52 2022 +0800

    add 2 amend

commit ef8abe2301688429c4facf978df245a90aa20a01
Date:   Fri Sep 23 09:33:13 2022 +0800

    add 1
>>> git show
//可以发现最近的一次8a1712提交是在文本的底部新增了add content 3文本
commit 8a17126665a728a5bfe98d24b3eb29c082f5e4a1 (HEAD -> master)
Date:   Fri Sep 23 09:35:00 2022 +0800

    add 3
//...
 
-add content 2
\ No newline at end of file
+add content 2
+
+
+
+add content 3
\ No newline at end of file
//虽然是新增了一行文本,git的记录内容将整个文本分块,记录的具体内容是删除了老的文本,新增了新的一块文本
//接下来对这个文件进行再一次的修改 在后面加上一个 “edit”
//如果不通过--amend进行commit,会在add 3提交的基础上增加一个新的提交
>>> git commit --amend
commit 54a84c8f51ff2b407e9fb19436fd75584b6170c4 (HEAD -> master)
Date:   Fri Sep 23 09:35:00 2022 +0800

    add 3 edit

commit 7539bae343faade6b4d3275abc35d13315382e28
Date:   Fri Sep 23 09:33:52 2022 +0800

    add 2 amend

commit ef8abe2301688429c4facf978df245a90aa20a01
Date:   Fri Sep 23 09:33:13 2022 +0800

    add 1
//可以看到add 2 amend之后只有一个提交
>>> git show
commit 54a84c8f51ff2b407e9fb19436fd75584b6170c4 (HEAD -> master)
Date:   Fri Sep 23 09:35:00 2022 +0800

    add 3 edit
//...
 
-add content 2
\ No newline at end of file
+add content 2
+
+
+
+add content 3 edit
\ No newline at end of file
//可以看出,最近的一次提交,在保留了上一次add content 3文本的基础上,把我新增的内容eidt也记录进去了,并且在add 2 amend的基础上就一次提交

通过这样就可以在commit已经生效的情况下,对内容继续修改,修改后通过--amend参数提交,就会以最新的内容(包含最近一次commit的内容)去跟上一次commit对比记录修改内容,并产生一次新的提交


产生有新的提交.png
小结

需要明确的是,一旦commit提交产生了历史记录,历史是不可以被修改的,通过--amend这样的参数修改最近一次提交记录也只是一种理解上的修改,其实是产生了一次新的提交记录,将当前分支和HEAD的引用指向的新的提交记录,并且新的提交记录包含了我们所要修改的记录

通过之前的commit的哈希值,可以直接checkout切换过去,从而验证一下历史的存在

--amend仅仅对最近的一次commit可以修改,毕竟--amend后没有更多的参数,使用的局限性还是有的,如果要对不是最近的一次commit进行修改,可以使用rebase -i,后面的文章里面会继续记录

你可能感兴趣的:(git防遗忘指南-amend修改最近一次commit记录)