Git 重置解释:软重置、混合重置和硬重置
git reset 将您的分支移动到另一个提交。这三种模式的区别仅在于它们对文件的处理方式不同。以下是每个人保留的内容、要使用的内容,以及当您重置得太远时如何恢复。
撰写者 Kodmora
GitTree 背后的软件公司
- 撤消和恢复
- 提交历史
- 提交
在此页面上
所有三种模式都将当前分支移动到您命名的提交。 `--soft` 保留所有更改暂存,`--mixed`(默认)将它们保留在工作文件夹中未暂存的状态,而 `--hard` 则丢弃它们。 要撤消上次提交但保留工作,请运行 git reset --soft HEAD~1。仅当您确定时才使用 --hard,因为它会永久删除未提交的更改。
软性、混合性和硬性有什么区别?
| 模式 | 分支已移动 | 暂存区 | 工作文件夹 | 用它来 |
|---|---|---|---|---|
--soft | 是的 | 保留 | 保留 | 重做提交:一切都处于暂存状态 |
--mixed | 是的 | 重置 | 保留 | 取消暂存并重新选择要提交的内容 |
--hard | 是的 | 重置 | 重置 | 把工作扔掉 |
Git 保留您工作的三个副本:提交历史记录、暂存区域和工作文件夹。重置总是先移动。该模式决定是否也重写其他两个。
我什么时候应该使用 git reset --soft ?
使用它来撤消提交,同时保留每个更改,准备再次提交。这是将分支压缩为一次提交的最快方法:
# undo the last commit, keep the changes staged
git reset --soft HEAD~1
# squash everything since main into one commit
git reset --soft main
git commit -m "feat(search): quick open"我什么时候应该使用 git reset --mixed ?
这是默认值,因此 git reset 表示 git reset --mixed。使用它来撤消提交并以不同的方式分割工作,或者取消暂存文件:
# undo the last two commits, keep the changes unstaged
git reset HEAD~2
# unstage one file (the branch does not move)
git reset src/search.ts对于取消暂存,git restore --staged src/search.ts 执行相同的工作并且读取更清晰。
我什么时候应该使用 git reset --hard ?
# drop the last commit and its changes
git reset --hard HEAD~1
# match the remote exactly
git fetch origin
git reset --hard origin/main如何从分支中删除提交?
| 情况 | 命令 |
|---|---|
| 最后一次提交,未推送 | git reset --hard HEAD~1 |
| 较旧的提交,未推送 | git rebase -i <sha>~1,然后将其标记为 drop |
| 提交已经推送 | git revert <sha> |
| 提交到了错误的分支 | git cherry-pick 它,然后重置旧分支 |
git revert 保持历史记录完整,因此它是共享分支上唯一安全的选择。重置已推送的分支需要强力推送并破坏队友的克隆。 Interactive rebase 和 cherry-pick 有自己的指南。
如何撤消 git 重置?
Reset 移动了分支,reflog 会记住它在哪里:
git reflog
# 3e52f10 HEAD@{0}: reset: moving to HEAD~2
# 9b3c7d1 HEAD@{1}: commit: add search box
git reset --hard 9b3c7d1这会返回提交,包括 --hard 之后的提交。有时可以使用 git fsck --lost-found 找到已暂存但从未提交的文件。从未发生过的变化已经消失了。 撤消重置、变基或提交 涵盖了所有情况。
重置、恢复和恢复之间有什么区别?
| 命令 | 它的作用 | 改写历史? |
|---|---|---|
git reset | 将分支移动到另一个提交 | 是的 |
git revert | 添加一个撤消另一个的提交 | 否 |
git restore | 更改文件,而不是分支 | 否 |
如何重置 GitTree 中的分支
选择提交
右键单击分支应返回到的提交并打开 Reset … to This Commit。
选择模式
选择软:保留所有更改暂存、混合:将更改保留在工作文件夹中或硬:放弃所有更改...。
如果需要,请撤消
GitTree 首先将您的工作保存在
refs/ogt/trash下,因此即使在硬重置之后,撤消也可以将其恢复。

常见问题
HEAD~1 是什么意思?
提交在当前提交之前的一步。 HEAD~3 向后退了三步。如果您想直接命名提交,则 git log --oneline 显示哈希值。
git Reset 会删除提交吗?
它将分支移离它们,因此它们不再出现在 git log 中。默认情况下,它们在引用日志中保留至少 30 天,然后 Git 可以将其删除。
如何撤消上次提交但保留更改?
运行 git reset --soft HEAD~1 使它们保持暂存状态,或运行 git reset HEAD~1 使它们保持非暂存状态。
git reset --hard 安全吗?
对于已投入的工作来说,这是安全的,而转发日志可以恢复这些工作。对于未提交的工作来说,它是不安全的,它会删除这些工作。如果您不确定,请先隐藏或提交。
我可以重置已经推送的分支吗?
仅通过强制推送,为每个人重写分支。在共享分支上,请改用 git revert。
来源
有关其他产品的声明已根据其位于 2026年11月7日 的官方页面进行了检查。价格和功能发生变化;供应商的页面是事实的来源。
