git进行版本回退(文件恢复、恢复误提交、已提交)

git log命令

1.介绍

git是我们代码管理必不可少的工具,平常我们使用时可能用遇到下面的问题,有时候我们提交代码后,发现提交错了,比如本地修改了不想提交的文件提交了上去,或者误提交了不完整的代码,这时候怎么把提交的回退呢?
一种不那么上高大上的办法是把代码文件再进行修改,再提交一次,有没有很low(手动笑哭)
今天就来和大家分享下在git下如何快速高大上进行版本的回退,不管你的代码是已提交到了本地,还是提交到了远程,都可以进行完美的回退,且别人看不到提交记录。

2.git的4个区

在介绍如何进行git版本回退前,我们需要先了解下git中的4个区:

  • 工作区(Working Area)

    就相当于我们的工作空间的目录,我们代码本地存放的地方。

  • 暂存区(Stage)

    也称作Index,用来跟踪已暂存的文件,一般是存在.git下的index文件,所以有时也称暂存区为索引。

  • 本地仓库(Local Repository)

  • 远程仓库(Remote Repository)

3.git文件的5种状态

我们还需要了解下git文件的5种状态

  • 未修改(Origin)
  • 已修改(Modified)
  • 已暂存(Staged)
  • 已提交(Committed)
  • 已推送(Pushed)

他们之间的关系如下图:

工作区暂存区本地仓库远程仓库git addgit commitgit diff --cached(已暂存,未提交)git diif(已修改,未暂存)git pushgit diff master origin/master(已提交,未推送)工作区暂存区本地仓库远程仓库

  • 工作区中的文件初始的状态是未修改,当我们修改文件后,其状态改变为已修改git diff可以查看已经修改但未暂存的文件。(git diff后输入q可以退出)
  • 通过git add命令可以把已修改的文件添加到暂存区git diff --cached可以查看已暂存,但未提交的文件。
  • 通过git commit进行代码提交到本地仓库git diff {本地分支} {远程分支}可以查看已提交本地,但未推送到远程的分支。
  • 通过git push命令将本地分支推送到远程分支。

PS:在我们的IDEA

4.回退命令

通过前面对git的4个区5种状态的介绍,我们已经准备的差不多了,其实git的版本回退就是在这4区5状态之间进行的操作。下面开始划重点了(_)
首先我们来介绍用到的命令

git reset命令

git reset 这个就是进行回退的具体命令,这里先介绍他的几个参数

--soft--mixed以及--hard是三个恢复等级。

  • 使用--soft就仅仅将头指针恢复,已经add的暂存区以及工作空间的所有东西都不变。
  • 如果使用--mixed,就将头恢复掉,已经add的暂存区也会丢失掉,工作空间的代码什么的是不变的。
  • 如果使用--hard,那么一切就全都恢复了,头变,aad的暂存区消失,代码什么的也恢复到以前状态。

git log命令

git log 用来查看git的提交记录,但不能查看已经删除的记录。

git reflog命令

git reflog命令可以查看看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录。

进行回退操作

下面我们开始进行具体的回退操作命令:

  • git reset --hard :进行已修改或者暂存,但未提交文件的回退
  • git reset --hard origin/master ”进行已提交,但未推送的版本回退
  • 1: git reset --hard HEAD^ 2:git push -f 这两条命令是进行已提交且推送的回退,git reset --hard HEAD^为先回退到上一个版本,git push -f是进行强制推送,覆盖远程分支。

上面的--hard可以替换成其它的恢复等级,一般用--soft,这样一些修改的内容不会丢失。

各种版本回退举例

git reset --hard head #当前版本
git reset --hard HEAD^ #回退到上一个版本
git reset --hard HEAD^^ #回退到上上一个版本
git reset --hard HEAD~3 #回退到往上3个版本
git reset --hard HEAD~10 #回退到往上10个版本

我们还可以用git log或者git reflog 查看版本的记录,用版本号来恢复到指定的版本。如
git reset --hard 710ae83 其中710ae83是版本号;
回退后,可以再用log和relog查看下版本的记录,对比下他们的区别。

git远程覆盖本地

当然,我们也可以直接用远程仓库的代码直接覆盖本地的仓库,这里我就不多哆嗦了,直接给大家奉上命令:

git fetch —all
git reset —hard orgin/master  #(master可以修改成其它要覆盖的分支)
git pull

git fetch 只是下载远程库的内容,不做任务的合并
git reset 把HEAD指向刚刚下载的最新版本

5.回退版本实操

1)、我们用git log命令找到本地版本的commit Id

45928e0d34b45d12779dd2c380ac8994b1dac700是我最后一次提交,
然后我们现在需要回退到501c224524f66548f67d2d414a7f570b40bb7c78

2)、我们用git log命令找到本地版本的commit Id

git reset --hard 501c224524f66548f67d2d414a7f570b40bb7c78

3)、将本地修改强制push到指定的远程仓库(此处是mater)

git push origin master --force

结语

明白git的4区5状态后,版本及文件恢复其实很容易的,大家可以根据上面提的自己在本地试下。关于git如何回退版本,恢复文件,撤消提交今天就给大家介绍到这里,如有不足或错误的地方,欢迎大家指正。

转载:木鸟飞的博客
转载:码莎拉蒂 .的博客

posted @ 2022-09-06 11:36  Journey&Flower  阅读(6694)  评论(0编辑  收藏  举报