git版本回退

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
2
3
abc1234 Commit 1
def5678 Commit 2
ghi9012 Commit 3

切换到 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}