git入门:git 各阶段版本回退命令

文章目录

  • 一、丢弃工作区的改动
  • 二、从暂存区回退到工作区
  • 三、本地仓库回退到以前版本
  • 四、回退GitHub远程仓库的代码
  • 总结

一、丢弃工作区的改动

在日常开发过程中,会遇到这种情况:在工作区更改了代码,但想起来有地方写错了,不想要工作区的代码了,回退到之前版本,使用命令:

git checkout – 文件名

示例:不小心删除了main.cpp文件,使用该命令,又回来了
git入门:git 各阶段版本回退命令_第1张图片

二、从暂存区回退到工作区

如果是在 git add 即提交到暂存区后发现有错误,想取消对暂存区的修改,使用命令:

git reset HEAD

示例:不小心删除了main.cpp文件,并且提交到了暂存区

  1. 提交到了暂存区

git入门:git 各阶段版本回退命令_第2张图片

  1. 使用 git reset HEAD回退,再使用git checkout – 恢复工作区

git入门:git 各阶段版本回退命令_第3张图片

三、本地仓库回退到以前版本

如果自己的代码错误在提交到本地仓库后才知道,那么可使用下面命令回退:

git log 先查看日志里所有版本的 commit-id(一个哈希值)
再使用
git reset --hard + commit-id

示例:对main.cpp做出了更改,且提交到了本地仓库

git入门:git 各阶段版本回退命令_第4张图片

使用git log查看日志,commit 后面跟的就是id值

git入门:git 各阶段版本回退命令_第5张图片

想回退到上个版本,示例:复制上面的commit-id后配合使用该命令,main.cpp又变回来了。这实际上就是对HEAD指针的操作。

git入门:git 各阶段版本回退命令_第6张图片

四、回退GitHub远程仓库的代码

在开发项目中如果把错误的版本提交到了远程仓库,别人克隆了你的错误版本,然后一看信息后发现是你提交的,那你少不了一顿骂。。。所以如果发生了这种错误,在别人没发现前,有下面的方法可以补救。

  1. 把自己工作区的代码改正,然后一步一步重新提交到远程仓库。
  2. 把自己本地仓库回退到以前版本,然后强制提交到远程仓库。
    使用命令
    git push -f origin main

这里示例第二个方法:
来看一个简单的示例,首先远程仓库的main.cpp是这样的

git入门:git 各阶段版本回退命令_第7张图片

在本地修改main.cpp让它什么也输出不了,并提交到远程仓库:

git入门:git 各阶段版本回退命令_第8张图片

此时我的远程仓库已经是错误的了:

git入门:git 各阶段版本回退命令_第9张图片

然后回退自己本地仓库版本,并强制提交到远程仓库:
可以看出,使用之前的命令无法提交到远程仓库,因为远程仓库的版本优先于我本地仓库的版本,所以需要加一个强制命令 -f ,意为 force 强制。

git push -f origin main

git入门:git 各阶段版本回退命令_第10张图片

这时候再来看看GitHub,又回到了以前的版本:
git入门:git 各阶段版本回退命令_第11张图片

总结

  1. git checkout – 在git add之前,把工作区的代码用版本库中的代码覆盖掉,注意命令中的–不能
    去掉,否则成切换分支的命令了
  2. git reset HEAD 把git add之后,暂存区的内容全部撤销
  3. git reset --hard commitid 把提交到本地仓库中的代码改动进行回退
  4. git reflog 查看HEAD指针的改动日志
  5. git push -f 强制推送本地仓库代码到远程仓库
  6. git diff HEAD – 查看工作区file文件和仓库中该文件最新版本的代码有什么区别

你可能感兴趣的:(git入门,必知必会,git,github,分布式,linux)