Git版本回退

介绍

该文档旨在解决文件恢复、恢复误提交、已提交。不管代码是已经提交到本地,还是提交远程仓库,都可以进行回退,并且不会留下git的提价记录。

git的分区

要想掌握git的版本回退,需要先了解git中的三大分区:

  • 工作区(working directory)

    项目代码存放的地方,一般都是项目的根目录。

  • 暂存区(Stage)

    一个临时保存修改文件的地方。.git文件夹中的index文件就是暂存区,作为用来直接跟工作区的文件进行交互,工作区文件的提交或者回滚首选都是通过暂存区。

  • 版本库(Local repository)

    也称为本地仓库,在我们为项目添加本地库后,会在工作区生成一个git的隐藏目录,git目录即为当前工作区的本地版本库。

git文件状态

git文件大致有如下的五种状态:

  1. 未修改(Origin)
  2. 已修改(Modified)
  3. 已暂存(Staged)
  4. 已提交(Committed)
  5. 已推送(Pushed)

各个状态之间的关系如下图

  • git diff可以查看已经修改但未暂存的文件。(git diff后输入q可以退出)。
  • git diff --cached可以查看已暂存,但未提交的文件。
  • git diff {本地分支} {远程分支}可以查看已提交本地,但未推送到远程的分支。
  • 通过git push命令将本地分支推送到远程分支。

回退命令

git rest命令

git reset就是进行回退的具体命令,配合具体的参数使用,可以达到不同的效果:

--soft--mixed--hard三个参数代表三个不同的回复等级:

  • --soft:仅仅将头指针(本地仓库)恢复,已经添加到暂存区以及工作区的代码不会发生改变。
  • --mixed: 头指针(本地仓库)恢复,已经添加到暂存区的代码也会恢复,工作区的代码不会发生改变。
  • --hard:一切都会恢复。头指针(本地仓库)恢复,已经添加到暂存区的代码也会恢复,工作区的代码也会恢复。

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指向刚刚下载的最新版本。

posted @ 2023-07-02 23:16  joudys  阅读(121)  评论(0)    收藏  举报