git commit的--amend选项

    git commit --amend常常用来修改某个branch上最顶端的commit,大多数情况下,这个命令给人的感觉是用新的commit替换了原来的commit。git commit --amend与下面的语句等价:

git reset --soft HEAD^  //将branch的头指针向前移动一个commit,--soft选项使得index和workspace tree的内容保持移动之前不变

...do something...

git commit -c ORIG_HEAD  //-c选项使得新提交的log message重用ORIG_HEAD指向的commit使用的log message,但允许用户编辑

 

举个例子,假设master branch上的提交历史如下图:

运行git commit --amend时,过程如下:

图中有阴影的commit就是master指针移动之前指向的commit,当git commit --amend运行结束后,这时因为没有任何其他branch指向有阴影的commit,该commit会被废弃。但是如果是下面的情况:

运行git commit --amend的过程如下:

上图中加阴影的commit仍然是master指针移动之前指向的commit,但是由于该commit还被alt branch引用,因此这个commit不会被废弃。

 

### 撤销 `git commit --amend` 操作的方法 在 Git 中,`git commit --amend` 命令常用于修改最近一次提交的提交信息或追加新的更改到该提交中。然而,如果误用了 `git commit --amend`,需要撤销该操作,可以通过 `git reset` 命令回退到 `amend` 之前的提交状态。 Git 的操作记录保存在 `reflog` 中,可以使用 `git reflog` 查看操作历史,找到 `amend` 操作之前的提交记录。例如,在以下记录中: ``` eaa9f3a HEAD@{0}: commit (amend): fix-so-84: 12345 33b4bab HEAD@{1}: commit: fix-so-84: 12345 ``` `HEAD@{1}` 指向的是 `amend` 操作之前的提交。可以通过 `git reset --hard HEAD@{1}` 回退到该提交状态,从而撤销 `git commit --amend` 操作[^4]。 ### 示例操作步骤 1. 查看 `reflog`,找到 `amend` 操作前的提交: ```bash git reflog ``` 2. 执行 `git reset --hard` 回退到 `amend` 之前的提交: ```bash git reset --hard HEAD@{1} ``` 该操作会将当前分支的 HEAD 指针指向 `HEAD@{1}` 所记录的提交,并将工作区和暂存区恢复到该提交的状态。这种方式可以有效地撤销 `git commit --amend` 的影响,同时保留工作区的改动。 ### 注意事项 - 如果在 `git commit --amend` 之后进行了其他提交,应确保 `reflog` 中的记录未被清理,否则可能无法通过 `reflog` 恢复。 - `git reset --hard` 会丢弃当前工作区和暂存区的所有未提交更改,因此在执行前应确认没有需要保留的未提交改动。 - 如果希望保留工作区内容,可以使用 `git reset --mixed HEAD@{1}` 或 `git reset HEAD@{1}`,这样可以撤销提交但保留工作区的改动[^3]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值