赞
踩
本文参考自https://blog.csdn.net/woai8339/article/details/90447901
我们知道git amend
作用是合并当前的改动至上一次提交
,起到修复的作用
比如:
我们假设一个场景,比如说,
小明第一次
git add .
git commit -m "first push"
git push
然后,在merge之前小明突然发现,我需要更新某一个文件,再次提交会生成新的commit-id。小明想在原有的提交之上再重新提交一次,这次就用到git commit --amend,会将此次提交作为最后一次提交更新。
注意:
前提是当前最后一次提交没有merge
,如果你在执行类似pull操作后,你本地的上一次提交就不一定是自己的提交了,可能是别人的某次commit。
当我们git amend
之后我们想撤销又该如何操作呢?
首先制造事故现场. 追加空行到项目中的 index.html 文件下:
$ echo "" >> index.html
$ git add .
$ git commit -m "add blank line to index.html"
然后再加一行到 index.html, 并 amend 一下:
$ echo "this line would break the code" >> index.html
$ git add .
$ git commit --amend
现场已经出现, 我们要撤销 amend 的那个提交.
三行命令解决的事情~
git reflog
查看操作记录,找到amend下一个head节点。这里用Ref[2]来看一下:
git reflog
后我们看到commit (amend)所在的head为红色对应的HEAD@{0}
,我们可以看到下一个head
为HEAD@{1}
。那么接下来,用 git reset
将当前分支的 HEAD
指向 HEAD@{1}
, 即可达到撤销 amend 的目的:
现在就把更新弄到工作区了,此时可以重新对index.html做处理,比如想把改动作为新的提交,而不是合并至上一次提交,
重新执行
git add index.html
git commit -m ‘new message’
git push
其实很简单,本来是知道git reflog 和 git reset 用法的,只是一时没有想起来用在这个地方,主要是没想起来git amend也会在git reflog 产生一条记录。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。