Git版本回退操作_git 回退版本
目录
1.描述
git中常用的两种版本回退方法
2.git reset
git reset
命令可以把当前的 HEAD
指针移动到指定的提交版本,并且可以根据不同的模式来决定是否保留工作区和暂存区的修改。该命令有三种模式,分别是--soft
、--mixed
和--hard
。
–soft:仅移动 HEAD 指针,保留工作区和暂存区的修改。
–mixed(默认模式):移动 HEAD 指针,并重置暂存区,但保留工作区的修改。
–hard:移动 HEAD 指针,重置暂存区和工作区,丢弃所有未提交的修改。
2.1 示例操作
- 查看提交历史:使用
git log
命令查看提交历史,找到你想要回滚到的版本的哈希值
。
git log
- 执行回滚操作:假设你想要回滚到的版本的哈希值是1234567,根据不同的需求选择不同的模式。
- 若要保留工作区和暂存区的修改,使用–soft模式:
git reset --soft 1234567
- 若要保留工作区的修改,重置暂存区,使用–mixed模式(默认):
git reset --mixed 1234567
- 若要丢弃所有未提交的修改,使用–hard模式:
git reset --hard 1234567
2.2 结果示例
假设提交历史如下:
commit D (HEAD -> master)commit Ccommit Bcommit A
- hard模式
在这种模式下,git reset --hard
会将 HEAD、暂存区和工作目录都重置到指定的版本。这意味着自指定版本之后的所有提交记录在本地仓库中都会被移除,你将无法再通过git log
命令看到这些提交。
若执行git reset --hard B
,提交历史会变为:
commit B (HEAD -> master)commit A
提交C和D在本地仓库里就会被清除。不过,如果这些提交已经推送到远程仓库,你还能从远程仓库找回;若没有推送,就只能借助git reflog
命令尝试找回了。
- mixed模式
git reset --mixed
会把 HEAD 和暂存区重置到指定版本,但是工作目录的修改会保留。虽然自指定版本之后的提交在git log
里看不到了,但工作目录中的文件还是保留了那些提交的修改,你可以重新提交这些修改。
若执行git reset --mixed B
,提交历史会变为:
commit B (HEAD -> master)commit A
不过工作目录里会保留提交C和D所做的修改,你可以重新把这些修改添加到暂存区并提交。
- soft模式
git reset --soft
仅仅移动 HEAD 指针,暂存区和工作目录都不会改变。这种情况下,虽然git log
里看不到指定版本之后的提交了,但暂存区和工作目录保留了那些提交的修改,你只需再次执行git commit就能恢复这些提交。
若执行git reset --soft B
,提交历史会变为:
commit B (HEAD -> master)commit A
2.3 hard模式误操作后找回
找回丢失记录的方法
若使用git reset --hard
导致提交记录丢失,可通过git reflog
命令找回。git reflog
会记录 HEAD 的每一次移动,你能从中找到之前提交的哈希值,然后使用git reset
或git checkout
回到那个提交。
示例如下:
git reflog# 输出类似如下内容1234567 (HEAD -> master) HEAD@{0}: reset: moving to Babcdefg HEAD@{1}: commit: commit D# 若要回到提交D,可执行git reset --hard abcdefg
3.git revert
3.1 操作示例
git revert
命令会创建一个新的提交,该提交的内容是撤销指定提交的修改。这种方法不会改变提交历史,适合在公共分支上使用。
- 查看提交历史:同样使用git log命令查看提交历史,找到你想要撤销的提交的哈希值。
git log
- 执行撤销操作:假设你想要撤销的提交的哈希值是1234567,执行以下命令:
git revert 1234567
- 编辑提交信息:执行
git revert
命令后,Git 会打开一个编辑器让你输入撤销提交的说明,这个说明通常会自动包含一些关于被撤销提交的信息。输入完成后保存退出,Git 就会创建一个新的提交来撤销指定提交的修改。 - 撤销多个连续提交
如果你想要撤销多个连续的提交,可以使用git revert
的范围语法。例如,如果你想要撤销从提交A到提交B(包含A和B)的所有提交,可以执行以下命令:
git revert A^..B
这里的A^
表示提交A的前一个提交,..
表示范围,B表示提交B。这样,Git 会依次撤销从A到B的所有提交,并创建相应的新提交。
3.2 结果示例
假设提交历史如下:
commit D (HEAD -> master)commit Ccommit Bcommit A
如果你想要撤销提交C,可以执行以下命令:
git revert C
执行该命令后,Git 会创建一个新的提交E,该提交的内容是撤销提交C所做的修改,提交历史会变为:
commit E (HEAD -> master)commit Dcommit Ccommit Bcommit A
综上所述,git revert
是一种安全的撤销提交的方法,适合在公共分支上使用,它可以在不丢失提交历史的情况下撤销指定提交的修改。