跳至内容
GitTree
Git 指南阅读 1 分钟

Git 重置解释:软重置、混合重置和硬重置

git reset 将您的分支移动到另一个提交。这三种模式的区别仅在于它们对文件的处理方式不同。以下是每个人保留的内容、要使用的内容,以及当您重置得太远时如何恢复。

撰写者 Kodmora

GitTree 背后的软件公司

已更新
  • 撤消和恢复
  • 提交历史
  • 提交
在此页面上

所有三种模式都将当前分支移动到您命名的提交。 `--soft` 保留所有更改暂存,`--mixed`(默认)将它们保留在工作文件夹中未暂存的状态,而 `--hard` 则丢弃它们。 要撤消上次提交但保留工作,请运行 git reset --soft HEAD~1。仅当您确定时才使用 --hard,因为它会永久删除未提交的更改。

软性、混合性和硬性有什么区别?

每个 git 重置模式会改变什么
模式分支已移动暂存区工作文件夹用它来
--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 中的分支

  1. 选择提交

    右键单击分支应返回到的提交并打开 Reset … to This Commit。

  2. 选择模式

    选择软:保留所有更改暂存、混合:将更改保留在工作文件夹中或硬:放弃所有更改...。

  3. 如果需要,请撤消

    GitTree 首先将您的工作保存在 refs/ogt/trash 下,因此即使在硬重置之后,撤消也可以将其恢复。

GitTree 中提交菜单中的软重置、混合重置和硬重置模式。
GitTree 中提交菜单中的软重置、混合重置和硬重置模式。GitTree 与演示存储库的接口。

有关详细信息,请参阅将分支重置为提交,以及在安全存储库上进行练习的重置模式课程。

常见问题

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日 的官方页面进行了检查。价格和功能发生变化;供应商的页面是事实的来源。