git commit 后的撤销

本文详细介绍了如何使用Git撤销最近的提交(commit),包括仅撤销提交、撤销提交并保留工作区改动、以及完全撤销到上一提交状态的方法。同时,还解释了如何修改已提交的注释。

原文:https://blog.youkuaiyun.com/w958796636/article/details/53611133

写完代码后,我们一般这样

git add . //添加所有文件

git commit -m "本功能全部完成"

 

执行完commit后,想撤回commit,怎么办?

git reset --soft HEAD^

 

这样就成功的撤销了你的commit

注意,仅仅是撤回commit操作,您写的代码仍然保留。

 

说一下个人理解:

HEAD^的意思是上一个版本,也可以写成HEAD~1

如果你进行了2次commit,想都撤回,可以使用HEAD~2

 

至于这几个参数:

--mixed 

意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作

这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

 

--soft  

不删除工作空间改动代码,撤销commit,不撤销git add . 

 

--hard

删除工作空间改动代码,撤销commit,撤销git add . 

注意完成这个操作后,就恢复到了上一次的commit状态。

 

 

顺便说一下,如果commit注释写错了,只是想改一下注释,只需要:

git commit --amend

此时会进入默认vim编辑器,修改注释完毕后保存就好了。

Git 中,如果你已经执行了 `git commit` 但尚未推送到远程仓库,可以通过以下几种方式撤销提交,具体取决于你的需求: --- ### **1. 撤销提交但保留更改(保留在工作区)** 使用 `git reset --soft`,撤销提交但保留更改在工作区和暂存区,方便重新提交: ```bash git reset --soft HEAD~1 ``` - **效果**:撤销最近一次提交,但文件更改仍保留在工作区(可重新编辑后提交)。 - **适用场景**:想修改提交信息或补充文件后再提交。 --- ### **2. 撤销提交并取消暂存(保留更改在工作区)** 使用 `git reset --mixed`(默认选项),撤销提交并取消暂存,但保留文件更改: ```bash git reset HEAD~1 # 或显式指定 --mixed git reset --mixed HEAD~1 ``` - **效果**:撤销提交,文件更改保留在工作区但不在暂存区(需重新 `git add`)。 - **适用场景**:想重新选择哪些更改提交。 --- ### **3. 彻底丢弃提交和更改(危险!)** 使用 `git reset --hard`,彻底丢弃提交和所有未提交的更改(慎用!): ```bash git reset --hard HEAD~1 ``` - **效果**:撤销提交并丢弃所有本地更改(工作区和暂存区均清空)。 - **风险**:未提交的更改会永久丢失! --- ### **4. 创建反向提交(保留历史记录)** 如果提交已推送到远程仓库,避免直接修改历史,可以用 `git revert` 生成一个反向提交: ```bash git revert HEAD ``` - **效果**:生成一个新提交,撤销上一次提交的更改(历史记录保留)。 - **适用场景**:协作开发中需避免强制推送(`git push --force`)。 --- ### **5. 修改最近一次提交(不撤销)** 如果想修改提交信息或补充文件,但不撤销提交: ```bash git commit --amend ``` - **效果**:修改最近一次提交的提交信息或补充暂存区的更改。 - **注意**:若已推送,需强制推送(`git push --force`)。 --- ### **如何选择?** | 需求 | 命令 | 是否保留更改 | 是否保留历史 | |--------------------------|-------------------------------|--------------|--------------| | 重新提交(修改信息/补文件) | `git commit --amend` | 是 | 是 | | 撤销提交但保留更改 | `git reset --soft HEAD~1` | 是 | 否 | | 撤销提交并取消暂存 | `git reset --mixed HEAD~1` | 是 | 否 | | 彻底丢弃提交和更改 | `git reset --hard HEAD~1` | 否 | 否 | | 生成反向提交(协作安全) | `git revert HEAD` | 是(反向) | 是 | --- ### **注意事项** 1. **未推送提交**:优先用 `reset`(`--soft`/`--mixed`)。 2. **已推送提交**:避免 `reset --hard`,改用 `revert` 或协商强制推送。 3. **强制推送**:`git push --force` 会覆盖远程历史,需团队确认。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值