git版本回退
git checkout:切换分支或恢复文件到指定提交。
git checkout 命令用于切换分支或恢复工作目录中的文件到指定的提交。
恢复工作目录中的文件到某个提交:
1 | git checkout <commit> -- <filename> |
例如,将 file.txt 恢复到 abc123 提交时的版本:
1 | git checkout abc123 -- file.txt |
切换到特定提交:
1 | git checkout <commit> |
例如:
1 | git checkout abc123 |
这种方式切换到特定的提交时,处于分离头指针(detached HEAD)状态。
git reset:重置当前分支到指定提交(软重置、混合重置、硬重置)。
git reset 命令可以更改当前分支的提交历史,它有三种主要模式:–soft、–mixed 和 –hard。
–soft:只重置 HEAD 到指定的提交,暂存区和工作目录保持不变。
1 | git reset --soft <commit> |
–mixed(默认):重置 HEAD 到指定的提交,暂存区重置,但工作目录保持不变。
1 | git reset --mixed <commit> |
–hard:重置 HEAD 到指定的提交,暂存区和工作目录都重置。
1 | git reset --hard <commit> |
例如,将当前分支重置到 abc123 提交:
1 | git reset --hard abc123 |
git revert:创建一个新的提交以撤销指定提交,不改变提交历史,适用于已经推送到远程仓库的提交。
1 | git revert <commit> |
例如,撤销 abc123 提交:
1 | git revert abc123 |
git reflog:查看历史操作记录,找回丢失的提交。
git reflog 命令记录了所有 HEAD 的移动。即使提交被删除或重置,也可以通过 reflog 找回。
1 | git reflog |
利用 reflog 可以找到之前的提交哈希,从而恢复到特定状态。例如:
1 | git reset --hard HEAD@{3} |
实例
以下是一个综合示例,演示如何使用这些命令恢复历史版本:
查看提交历史:
1 | git log --oneline |
假设输出如下:
1 | abc1234 Commit 1 |
切换到 Commit 2(处于分离头指针状态):
1 | git checkout def5678 |
重置到 Commit 2,保留更改到暂存区:
1 | git reset --soft def5678 |
重置到 Commit 2,取消暂存区更改:
1 | git reset --mixed def5678 |
重置到 Commit 2,丢弃所有更改:
1 | git reset --hard def5678 |
撤销 Commit 2:
1 | git revert def5678 |
查看 reflog 找回丢失的提交:
1 | git reflog |
找到之前的提交哈希并恢复:
1 | git reset --hard HEAD@{3} |