git之如何恢复代码到之前版本

写在前面

在工作中,我们经常会遇到这种场景,因为误操作,将代码push到了远端仓库,此时就需要恢复代码到我们提交之前的某个版本,本文就一起来看下看下类似的这种场景我们应该如何处理。

1:恢复所有文件

假设现在我们有如下的提交记录:

在这里插入图片描述

我们想要恢复的话,只需要执行命令git reset --hard <要恢复到的版本号>,如下:

$ git reset --hard d0c9bddae
HEAD is now at d0c9bdd 1111

JHP+Administrator@jhp MINGW64 /d/test/test-reset (master)
$ git log -n5 --pretty=oneline
d0c9bddae5a3f0e44f58f830ec47ff2eac89ca49 (HEAD -> master) 1111
783110dcd88c5c8b7acb8d31c5a56ec3705f6419 Initial commit

可以看到恢复成功了,效果就是本地时光倒流了,但是此时因为本地的代码版本落后于仓库(其实就是我们开发完代码后,push时,已经有其他人push了代码的场景,必须先pull才行),此时我们想要push到远端仓库,必须加上-f参数,注意该操作很危险,因为会强制删除其他人的提交记录,如下:

$ git push origin master:master -f
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.3]
To https://gitee.com/dongsir2020/test-reset.git
 + 9ed6070...d0c9bdd master -> master (forced update)

2:恢复部分文件

假设现在我们有如下的提交记录:

$ git log -n8 --pretty=oneline
9168bd48aa6090fece2adc374207a171f643d166 (HEAD -> master, origin/master, origin/HEAD) 3333333
d0c9bddae5a3f0e44f58f830ec47ff2eac89ca49 1111
783110dcd88c5c8b7acb8d31c5a56ec3705f6419 Initial commit
$ git show --raw 9168bd48aa6090fece2adc374207a171f643d166
commit 9168bd48aa6090fece2adc374207a171f643d166 (HEAD -> master, origin/master, origin/HEAD)
Author: dongyunqi 
Date:   Mon Jun 20 18:07:12 2022 +0800

    3333333

:100644 100644 90b4516 5114355 M        aa.txt
:100644 100644 7accf80 f4eb5cf M        bb.txt

可以看到在提交9168bd48a我们修改了aa.txt,bb.txt,但是我们只想要修改aa.txt到版本d0c9bdda的提交,就可以执行如下命令:

$ git checkout d0c9bddae5a3f0e44f58f830ec47ff2eac89ca49 aa.txt
Updated 1 path from 2e85e4c

这样做本质就是使用指定版本对本地的文件做了修改,效果和我们自己做的修改是一样的,因此可以如同提交自己修改的代码一样,来提交代码了。如果是文件不多,可以优先考虑使用这种方式来恢复文件,因为这种方式不会删除提交历史,也不会存在删除别人已经提交的代码的风险,在实际工作中需要根据具体情况来选择使用。

写在后面

Git恢复之前版本的两种方法reset、revert(图文详解) 。

你可能感兴趣的:(git,git,git,reset,git,chekcout,恢复代码)