git commit --amend 与git commit -m 的区别以及用法

本文主要讲述了gitcommit-m与gitcommit--amend这两种git提交方式的差异,包括适用场景、使用流程和注意事项,强调了在使用gitcommit--amend前需添加文件到暂存区并正确管理commitID。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如题,这篇blog主要是想用来记录一下 git commit -m 和 git commit --amend 的用法差异。

我们在使用git上传代码时,正常的流程应该是  git add -u  或者  git add  将文件添加到暂存区,这二者的差异这里不做阐述。然后执行  git commit -m "注释内容"  ,最后push到远程厂库。这时候如果我们push完成后发现代码上传错了!或者需要修改,这时候我们有什么办法可以重新commit呢?这里就涉及到  git commit --amend  的使用了。下面就记录一下我理解的两种commit的使用区别,我也是踩了一些坑做的总结。也欢迎各位指正。

git commit -m

这种commit方式一般适用于某批次文件的第一次提交,一般来说后面是会跟着添加注释,注释这一操作非常关键,能够让管理者和自己区分不同的commit对应的内容。commit后可以通过使用tig查看本次commit的内容以及ID。如下图所示。当然,git log也可以查看本次commit的ID。

tig显示

git commit --amend

amend这种方式一般也称为打补丁,主要是用于本次commit之后,发现文件仍需要补充、添加、修改或者注释需要修改的情况下使用。而且一般来说是需要在push后或者push前,远程厂库管理者尚未进行合并操作的情况下可以使用,如果远程厂库管理者进行了合并操作,那amend之后大概率是会push是会失败的。

使用方式

git commit --amend在使用前,首先是先要把二次修改的文件,或者说上次commit的时候漏的文件,利用git add -u或者git add的方式把文件提交到暂存区,然后再执行git commit --amend,这时候回车后会弹出一个文件(我这里是vim,以vim为例),等待你的编辑,如果你此时只是为了补上漏的文件不需要修改注释内容,那么直接:q退出即可,然后执行push操作推送至远程厂库就好了。如果你需要修改注释内容,那么你就应该在待编辑的文件里修改你的注释,然后:wq保存退出,然后push推送到远程厂库即可。

在使用amend方式的时候需要注意的是,务必确保自己本次执行 git commit --amend时,对应的commit ID是你所希望的,换句话说就是确保是你上一次的commit操作,不然就容易导致一些混乱操作。最简单的确认方式是tig或者git log查看最新一次的commit ID,这时候执行amend所要重复commit的就是最新的commit。那就又有一个问题了,如果我想要执行的amend操作的commit,不是最新的commit,该怎么办呢?这时候就要使用到commit ID。我一般的使用方法是利用git reset --soft commit ID ,这个指令会回退到指定的commit id,在这个ID之后的commit都会被回退,此时再执行amend,就是对应reset commit ID的内容。

总的来说就是,在执行git commit --amend之前一定要先把文件添加到暂存区,这时候使用amend就会把暂存区的文件进行提交。执行amend弹出的文件一般只会修改注释内容,其他内容是不用改的,而且改了也没用。

### 修改最近一次提交信息 `git commit --amend -m` 命令用于修改最近一次提交的描述信息。该操作不会影响之前的提交历史,仅适用于本地尚未推送至远程仓库的提交[^1]。 使用方式如下: ```bash git commit --amend -m "新的提交信息" ``` 执行后,会替换上一次提交的描述内容为指定的新信息。如果当前提交尚未推送到远程仓库,则可以直接使用此命令进行修改[^3]。 --- ### 修改非最新提交的信息 若需修改更早的提交信息(如第二次或更早的提交),需要借助交互式 `rebase` 操作。具体步骤如下: 1. 使用 `git log --oneline -n` 查看最近几次提交记录,获取目标提交的哈希值。 2. 启动交互式 rebase 编辑器,输入以下命令(假设要修改倒数第二个提交): ```bash git rebase -i <目标提交的前一个提交哈希> ``` 3. 在编辑器中将目标提交前的 `pick` 改为 `edit`,保存并退出。 4. 执行以下命令修改提交信息: ```bash git commit --amend -m "新的提交信息" ``` 5. 完成修改后继续 rebase 操作: ```bash git rebase --continue ``` 该方法允许对任意历史提交进行信息修改,但会重写提交历史,因此在多人协作环境中应谨慎使用[^2]。 --- ### 高级用法组合操作 除了修改提交信息外,`git commit --amend` 还可其他 Git 命令结合使用,实现更复杂的功能: - **修改提交作者信息**: ```bash git commit --amend --author="新作者 <email@example.com>" ``` - **修改提交时间戳**: ```bash git commit --amend --date="2023-01-01T12:00:00" ``` - **撤销提交并重新提交**: 可以先使用 `git reset --soft HEAD~1` 回退到暂存区,然后重新提交: ```bash git reset --soft HEAD~1 git commit -m "新的提交信息" ``` 此操作等效于 `git commit --amend`,适用于需要额外调整文件后再提交的情况。 --- ### 注意事项 - **提交已推送到远程仓库时的操作风险**: 如果已经将提交推送到远程仓库,再使用 `git commit --amend` 并强制推送(`git push -f`),可能会导致远程分支历史混乱,影响其他开发者的工作流。建议在团队协作中避免随意修改已推送的历史记录[^1]。 - **查看修改后的提交记录**: 可通过 `git reflog` 查看所有本地提交操作的历史记录,包括被 `--amend` 修改过的提交信息[^4]。 --- ### 示例场景 假设当前提交历史如下: ```bash 69a9841 (HEAD -> master) 我是第3次提交,错误的message 8b3a071 第2次提交,新增内容:git commit --amend v2 d3e2d8c 第1次提交,新增readme.txt文件 ``` 可以使用 `git commit --amend -m "我是第3次提交,正确的message"` 修改最新的提交信息。修改后可通过 `git log` 或 `git reflog` 确认更新结果[^4]。 --- ### Gerrit 等代码审查平台的集成 在某些开发流程中(如 Gerrit 提交机制),开发者在本地完成修改并使用 `git add` 添加更改后,可以通过 `git commit --amend` 更新提交信息,随后执行 `git push` 推送至 Gerrit,生成对应的 patch 集合[^5]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值