git reset
约 758 字大约 3 分钟
描述
git reset 用于重置当前 HEAD 到指定的状态。这个命令可以用来撤销提交、重新整理提交历史,或者改变分支的指向。
git reset 有三种主要的工作模式,每种模式的行为略有不同:
git reset --soft [commit]将 HEAD 指向指定的提交,但是索引(staging area)和工作目录的内容保持不变。这意味着所有自指定提交以来的更改都被视为已暂存,准备进行下一次提交。这个模式通常用于重新组织提交历史,而不改变工作目录中的实际文件。
git reset --mixed [commit]或git reset [commit](默认模式)将 HEAD 和索引都指向指定的提交,但是工作目录中的文件保持不变。这会导致自指定提交以来的更改全部变为未暂存状态(即,它们会出现在
git status的未跟踪文件列表中)。这个模式常用于撤销提交,但不立即丢弃工作目录中的更改。git reset --hard [commit]将 HEAD、索引和工作目录都重置为指定提交的状态。这会丢弃自指定提交以来的所有更改,包括暂存的和未暂存的。使用这个模式时要特别小心,因为它会删除所有未提交的更改。
注意事项:
- 在使用
git reset时,请确保您了解当前的工作目录状态,以及您希望达到的最终状态。错误的git reset命令可能会导致数据丢失 - 在执行任何可能导致数据丢失的操作之前,最好先使用
git status查看当前的状态,并使用git log查看提交历史 - 如果您想撤销某个提交,但又不想丢失该提交中的更改,可以先使用
git reset将 HEAD 移动到该提交之前,然后再手动应用所需的更改并提交 - 如果您只想撤销最近的一次提交,并保留更改以便进行新的提交,那么
git reset --soft HEAD^或git reset --mixed HEAD^可能是合适的命令
选项
| 选项 | 描述 |
|---|---|
-q, --quiet | 不显示输出内容 |
示例
使用 soft 模式
例如:重置到上一次提交,不更改工作区和暂存区。
git reset --soft HEAD^
使用 mixed 模式
例如:重置到上一次提交,更改暂存区以匹配当前工作区,不更改工作区。
git reset --mixed HEAD^
使用 hard 模式
例如:重置到上一次提交,更改暂存区和工作区以匹配当前 HEAD。
git reset --hard HEAD^
例如:放弃本地的所有修改,包括已修改和已暂存的文件。
git reset --hard
重置到特定的提交
例如:重置到指定的 commit id。
git reset <commit id>
重置单个文件
例如:取消已暂存的 test01.txt 文件,但保留文件的更改。
git reset test01.txt
