从永远到永远-Git撤销某次commit

本文详细介绍了如何使用 Git 撤销错误的 commit,包括 git reset --hard、--mixed 和 --soft 的区别,并针对误操作可能导致的问题进行了解释。在实际开发中,若不慎将不相关内容提交并推送到远程分支,应当谨慎使用 git reset 命令,以防止丢失代码。同时,文章提到了 force push 灰色不可用的情况,通常由于分支保护导致,解除保护后才可进行 force push。

1.问题

某次提交的时候,不小心将不属于此次开发的内容提交了并且推送到了远程分支。现在,希望本地及远程库全部撤回到当前版本。
如下图,只想提交Sample,却不小心将SampleOther也提交,并且push到了远程仓库。
在这里插入图片描述
在这里插入图片描述

2.解决

1.git reset

1.git reset --hard

!!!注意:需要特别主注意,一些帖子直接写的使用 git reset --hard HEAD^和git push origin master -f。这个操作会导致本地所有的上个版本之后的代码全部丢失掉!
不适用我这种情况,但是踩过坑还是复现下,希望大家少走弯路。
在这里插入图片描述
实际开发中,大多数时候,错误的那次提交中只有部分代码是不需要提交的,有些是需要正常后提交的。比如Sample,这个时候直接使用git reset --hard就不行。

2.git reset --mixed

新增的类变成未add状态,修改的变成未commit状态。
在这里插入图片描述
但是错误的commit信息还在,需要force push一下。
在这里插入图片描述

3.git reset --soft:

在这里插入图片描述
修改的文件变成待commit状态,新增的文件会被add,也变成未commit状态。也是不符合需求的,我原来不打算add的文件变成add存到暂存区了。
在这里插入图片描述

3.常见问题

1.force push灰色

如果按钮灰色,说明分支受保护,通常情况下,master分支是受保护的。实际开发中,基本上不可能直接在master开发,也就是说基本不可能出现,在master上提交错了,想要回退。
如果执意要操作,将受保护分支去掉即可。
在这里插入图片描述之后再force push即可。

<think>我们被要求使用中文回答问题,并且在回答后提出3-5个相关问题,以“§§相关问题§§”开头,且禁止换行分散。 问题:git commit --amend和git commit的区别 首先,我们需要解释这两个命令的区别。 1. git commit:创建一个新的提交,将暂存区(stage)的更改保存到版本库中,形成一个新的提交记录。每次执行都会生成一个新的提交对象,并移动当前分支的指针到这个新提交。 2. git commit --amend:修改最近的提交。它不会创建新的提交,而是将当前暂存区的更改与最近一次提交合并,形成一个新的提交替换掉最近一次提交。如果暂存区没有更改,则可以用来修改上一次提交的提交信息。 然后,我们按照要求提出3-5个相关问题。 注意:回答中不要包含任何markdown标题,但需要按照示例格式,在代码块中如果有代码则使用代码块,但这个问题不需要代码块,所以我们可以用文字描述。 示例格式中有一个代码块,但我们的问题不需要代码,所以我们可以用文字描述,或者如果有命令示例也可以写,但这里我们主要用文字。 我们按照以下结构: 1. 解释两个命令 2. 提出相关问题 注意:相关问题要基于用户的问题和我们的回答。 开始回答: </think> ### `git commit --amend` 与 `git commit` 的区别 #### 1. **基本功能** - **`git commit`** 创建**新提交**,将暂存区(staging area)的改动保存到版本库中,生成新的 commit hash,分支指针向前移动。 ```bash git add file.txt git commit -m "新增功能" # 创建新提交记录 ``` - **`git commit --amend`** **修改最近一次提交**(不创建新提交),可用于: - 修改提交信息 - 将当前暂存区改动合并到上一次提交 - 分支指针位置不变(替换原提交) ```bash git add missed_file.txt # 添加遗漏文件 git commit --amend --no-edit # 合并到上一提交,不修改信息 ``` #### 2. **核心差异** | 特性 | `git commit` | `git commit --amend` | |--------------------|-----------------------|----------------------------| | 提交类型 | 创建新提交 | 修改最近一次提交 | | 提交哈希值 | 生成新哈希 | 替换原哈希(历史被重写) | | 分支指针移动 | 向前移动 | 原地替换(不移动) | | 适用场景 | 常规提交 | 修正刚提交的错误 | | 已推送的提交 | 安全使用 | **危险**(需强制推送) | #### 3. **典型使用场景** - **修改提交信息** ```bash git commit --amend -m "更准确的描述" ``` - **补充遗漏文件** ```bash git add forgotten.py git commit --amend ``` - **撤销`git commit`误操作** ```bash git reset --soft HEAD~1 # 撤销commit但保留改动 git commit -m "正确的提交" # 重新提交 ``` #### 4. **注意事项** - **历史重写风险**:`--amend` 会改变提交历史,**已推送**的提交需用 `git push --force`(可能影响协作) - **操作范围**:只能修改**最近一次**提交,更早提交需用 `git rebase -i`
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值