Git 初接触 (三) Git的撤销操作 git commit --amend

本文介绍Git中的撤销操作,包括如何使用`git commit --amend`命令来修改最近一次提交的内容,以及如何通过`git reset`命令回退到指定版本。
在项目中我们也经常会使用到撤销操作 使用这一节我们就讲一讲Git的撤销操作

撤销操作主要有如下几种

git commit   --amend        撤销上一次提交  并讲暂存区文件重新提交
git checkout -- <file>     拉取暂存区文件 并将其替换成工作区文件
git reset HEAD  -- <file>  拉取最近一次提交到版本库的文件到暂存区  改操作不影响工作区
  • git commit --amend

    该命令可以用来撤销上一次提交到版本库的操作 并将暂存区重新提交到版本库中

    简单的说就是可以帮我们 修改 最近一次提交到版本库的内容

    下面我们来演示一下 git commit --amend 的操作

    我们先 git log --oneline 显示一下我们的提交记录

                 $ git log --oneline 
                 c8a7da4 (HEAD -> master) version 4.0
                 5e39288 version 3.0
                 4378903 version 2.0
                 f0a1684 version 1.0
    

    这是我们项目中的文件

    这里写图片描述

    index.html 的内容也非常简单 version 是几 就在 在 <h1> 标签中输出version几 如下图 version 4.0 <h1> 就为 <h1>this is Version 4.0</h1>

    这里写图片描述

    我们现在准备提交5.0版本 但是我们不小心把 <h1> 改为 this is Version 50.0 并且提交到了版本库

    这时我们需要把刚刚提交到的版本库的操作撤销掉 并将正确的5.0版本提交 这时我们就需要用到 git commit –amend 命令了

    首先我们把工作区的 <h1> 改为正确的 this is Version 5.0 然后 git add 到暂存区 再使用 git commit –amend 命令即可

    这时会出现下面的界面

    这里写图片描述

    这是vim编辑器的界面 最上面的 version5.0 是我们上次提交是的备注 由于我们这次提交的还是5.0版本所以就不用修改 下面的 modified: index.html 则表明我们这次重修提交修改了 index.html 文件

    按 Esc+w+q 我们保存退出

    这里写图片描述

    提交成功 再次查看 git log --oneline

    这里写图片描述

    发现只有五次提交说明我们刚刚是在修改 而不是再次提交

    现在我们把工作区的 index.html 删除 然后使用 git reset --hard 65a764365a7643为git log 打印出的版本号 ) 来回退到 我们刚刚修改提交的 version 5.0 版本 如果修改了 <h1> 应该为 this is Version 5.0

    执行命令 rm -rf index.html 然后 git reset --hard 65a7643

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    如上图 我们修改成功 git commit --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 不变 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值