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

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

如题,这篇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` 和 `git commit --amend --no-edit` 都是用来修改最新一次 commit 的命令,但它们在 **是否修改 commit message** 上有重要区别--- ## **1. `git commit --amend`(默认行为)** ### **作用** - **修改最新的 commit**(包括提交内容和 commit message)。 - 如果暂存区(Staged)有新的修改,会 **合并到上一个 commit**。 - **会打开默认编辑器**(如 Vim、Nano),让你修改 commit message。 ### **使用场景** - 想 **修改 commit message**(比如修正拼写错误、补充说明)。 - 想 **合并新的改动到上一个 commit**(比如漏掉了某个文件)。 ### **示例** ```bash git add new_file.txt # 添加漏掉的文件 git commit --amend # 修改 commit message 并合并 new_file.txt ``` **效果**: - Git 会打开编辑器,显示原 commit message,你可以修改它。 - 最终生成一个新的 commitCommit Hash 会变)。 --- ## **2. `git commit --amend --no-edit`** ### **作用** - **修改最新的 commit,但保持 commit message 不变**。 - 如果暂存区有新的修改,会 **合并到上一个 commit**,但 **不会修改 commit message**。 - **不会打开编辑器**,直接完成修改。 ### **使用场景** - 只想 **合并新的改动到上一个 commit**,但 **不想改 commit message**。 - 适用于: - 漏掉了某个文件(`git add` 后合并到上一个 commit)。 - 修复了代码但不想改 commit 描述。 ### **示例** ```bash git add fixed_code.py # 添加修复的代码 git commit --amend --no-edit # 合并到上一个 commit,不修改 message ``` **效果**: - 上一个 commit 会包含 `fixed_code.py`,但 commit message **完全不变**。 - Commit Hash 仍然会变(因为内容变了)。 --- ## **关键区别总结** | **行为** | `git commit --amend` | `git commit --amend --no-edit` | |-------------------------|----------------------|--------------------------------| | **是否修改 commit message** | ✅ 是(打开编辑器) | ❌ 否(保持原 message) | | **是否合并暂存区改动** | ✅ 是 | ✅ 是 | | **是否改变 Commit Hash** | ✅ 是 | ✅ 是 | | **适用场景** | 修改 message 或合并改动 | 仅合并改动,不改 message | --- ## **注意事项** 1. **`--amend` 会改变 Commit Hash** - 即使只是改 message,也会生成一个新的 commit,**影响 Git 历史**。 - 如果 commit 已经推送到远程,需要用 `git push --force-with-lease`(慎用!)。 2. **`--no-edit` 适合快速修复** - 如果你只是漏了文件或代码,且 commit message 已经足够清晰,用 `--no-edit` 更高效。 3. **编辑器行为** - 如果不加 `--no-edit`,Git 会打开默认编辑器(如 Vim),需要保存退出才能完成修改。 --- ## **示例对比** ### **场景 1:修改 commit message** ```bash git commit --amend # 修改 message ``` ### **场景 2:只合并新改动,不改 message** ```bash git add missing_file.js git commit --amend --no-edit # 合并文件,message 不变 ``` ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值