Git 撤销与回滚操作 Stash、Reset 与 Revert

十一月 20, 2025 / 樱羽雨奈 / 19阅读 / 0评论

一、工作区暂存:git stash

1. 概念与作用

当你的工作区有未完成的修改,但又需要立即切换到另一个分支(如处理紧急 Bug)时,git commit 显然不合适。git stash 可以临时保存当前工作区和暂存区的所有修改,并将工作区恢复到最近一次提交的状态。

⚠️ 注意: stash 不会保存未被 Git 追踪(Untracked)的文件。如果需要,你需要先 git add 或使用 git stash -u

2. 核心操作命令

$ git stash默认保存所有已追踪文件的修改(工作区和暂存区)。

$ git stash save "描述信息"保存暂存的同时,添加描述信息方便查找。

$ git stash list查看所有存储的暂存列表。

$ git stash apply [stash@{n}]应用指定的暂存(不删除暂存记录)。

$ git stash pop应用最近一次的暂存,并将其从列表中删除

$ git stash drop [stash@{n}]删除指定的暂存记录。

$ git stash clear清空所有暂存记录(慎用!)。

二、撤销本地修改:git reset

1. 概念与作用

git reset 命令用于重置 HEAD 指针,将当前分支的引用指向上一个或指定的提交版本。这个操作会修改本地的提交历史,通常用于私有分支(未推送到远程的本地分支)的撤销操作。

2. 重置模式详解

git reset 提供了三种模式,决定了撤销提交后,对暂存区工作区的影响:

模式

命令格式

HEAD 移动

暂存区变化

工作区变化

适用场景

--soft

$ git reset --soft [Commit ID]

移动

保留(文件回到暂存区)

保留

撤销提交信息错误,想重新提交。

--mixed

$ git reset [Commit ID]

移动

清空(文件回到工作区)

保留

撤销提交,想重新编辑和提交。

--hard

$ git reset --hard [Commit ID]

移动

清空

清空(工作区文件被覆盖)

彻底丢弃某些提交及其所有修改(最危险)。

Commit ID 查找: 可以使用提交的 哈希值(40 位或前几位)或相对引用(如 HEAD~1 代表上一次提交)。

三、安全回滚提交:git revert

1. 概念与作用

git revert 用于撤销历史上的某一个或多个提交。与 reset 直接修改历史不同,revert 的原理是创建一个新的提交,这个新提交的内容与要撤销的提交刚好相反

2. 核心优势

  • 安全: 不会修改历史记录,而是用一个新的提交来抵消旧提交的影响。

  • 适用于公共分支: 这是唯一推荐用于回滚已推送到远程仓库(如 masterdev)的提交的方式。

3. 命令行操作示例

示例 1: 回滚指定的提交

# 撤销 Commit ID 为 [Commit ID] 的提交。
# Git 会打开编辑器让你输入新的 Revert 提交信息。
$ git revert [Commit ID]

示例 2: 回滚最近三个提交(但保留历史记录)

# 撤销 HEAD^ 到 HEAD 之间的提交(注意是倒序)
$ git revert HEAD~3..HEAD

#Git(5)

文章作者:樱羽雨奈

文章链接:https://www.xiyung.cn/archives/git-cxhg

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0 许可协议,转载请注明出处!