> 技术文档 > Git版本回退操作_git 回退版本

Git版本回退操作_git 回退版本


目录

    • 1.描述
    • 2.git reset
      • 2.1 示例操作
      • 2.2 结果示例
      • 2.3 hard模式误操作后找回
    • 3.git revert
      • 3.1 操作示例
      • 3.2 结果示例

1.描述

git中常用的两种版本回退方法

2.git reset

git reset命令可以把当前的 HEAD 指针移动到指定的提交版本,并且可以根据不同的模式来决定是否保留工作区和暂存区的修改。该命令有三种模式,分别是--soft--mixed--hard

–soft:仅移动 HEAD 指针,保留工作区和暂存区的修改。
–mixed(默认模式):移动 HEAD 指针,并重置暂存区,但保留工作区的修改。
–hard:移动 HEAD 指针,重置暂存区和工作区,丢弃所有未提交的修改。

2.1 示例操作

  1. 查看提交历史:使用git log命令查看提交历史,找到你想要回滚到的版本的哈希值
git log
  1. 执行回滚操作:假设你想要回滚到的版本的哈希值是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 resetgit 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命令会创建一个新的提交,该提交的内容是撤销指定提交的修改。这种方法不会改变提交历史,适合在公共分支上使用。

  1. 查看提交历史:同样使用git log命令查看提交历史,找到你想要撤销的提交的哈希值。
git log
  1. 执行撤销操作:假设你想要撤销的提交的哈希值是1234567,执行以下命令:
git revert 1234567
  1. 编辑提交信息:执行git revert命令后,Git 会打开一个编辑器让你输入撤销提交的说明,这个说明通常会自动包含一些关于被撤销提交的信息。输入完成后保存退出,Git 就会创建一个新的提交来撤销指定提交的修改。
  2. 撤销多个连续提交
    如果你想要撤销多个连续的提交,可以使用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是一种安全的撤销提交的方法,适合在公共分支上使用,它可以在不丢失提交历史的情况下撤销指定提交的修改。