Git 的回退机制允许你将 HEAD(当前工作分支的指针)、索引(暂存区)和工作目录回退到某个特定的状态。以下是一些常用的 Git 回退命令和它们的用途:
-
git reset: -
用于将 HEAD 指针移动到指定的状态,但不会影响工作目录和索引。
-
有三个主要选项:
--soft、--mixed(默认)和--hard。--soft:回退到某个提交,但保留暂存区和工作目录的内容。--mixed:回退到某个提交,保留工作目录的内容,但放弃暂存区的内容。--hard:彻底回退到某个提交,放弃暂存区和工作目录的所有更改。
-
git revert: -
创建一个新的提交,这个提交的内容是撤销之前的某个提交所做的更改。
-
不会改变项目的历史记录,而是在历史记录的基础上添加一个新的提交。
-
git checkout: -
用于切换分支或将文件回退到某个特定版本。
- 如果用来切换分支,HEAD、索引和工作目录都会更新到新分支的状态。
-
如果用来回退文件,只会影响工作目录。
-
git clean: -
用于删除工作目录中未跟踪的文件和目录。
-
可以与
-n(仅列出将要删除的文件,不执行删除操作)或-f(强制删除)等选项一起使用。 -
git reflog: -
记录了你的 HEAD、分支引用和标签的变动历史。
-
当你丢失了提交记录时,可以使用
git reflog来找回历史记录,并使用git checkout或git reset来回退到某个特定的状态。 -
git reset HEAD: -
用于将 HEAD 指针回退到某个特定的状态,但不会影响工作目录。
-
通常与
git reset --soft类似,但更明确地表示只回退 HEAD 指针。 -
git reset <commit>: -
将 HEAD 指针移动到指定的提交,并且根据选项(
--soft、--mixed、--hard)决定是否回退索引和工作目录。 -
git revert <commit>: -
创建一个新的提交,撤销指定提交的更改。
使用这些命令时,需要谨慎操作,特别是在使用 --hard 选项时,因为它会丢弃工作目录和暂存区的更改,这些更改将无法恢复。在执行回退操作之前,建议先备份当前的工作状态。