写点什么

Git 如何回退代码

作者:秋天
  • 2022 年 3 月 21 日
  • 本文字数:1261 字

    阅读完需:约 4 分钟

Git 如何回退代码

前言

现在工作中用的最多的版本管理工具就是 git,相信大家在互联网公司都在使用它。故今天对于 git 的使用方法和常用命令做一个简短的介绍,一个是用来自己作为学习记录,另一个作为工作的备忘。当然有需要的小伙伴也可以当做搜索问题的一个答案参考项。好了,话不多说,下面就来介绍一下今天的主题 git 是如何回退代码的?


我们下面分三种情况来介绍:

  • 一个是代码已经还没提交到暂存区

  • 另一个是代码已经提交到暂存区

  • 最后一个就是代码已经 push 到远程仓库


下面先对暂存区这个名词做一个解释:

暂存区:Git 的版本库里存了很多东西,其中最重要的就是称为 stage(或者叫 index)的暂存区,还有 Git 为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD



一、代码已经还没提交到暂存区


Git 会告诉你,git checkout -- file可以丢弃工作区的修改:

$ git checkout -- readme.txt


命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

  • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

  • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

git checkout -- file

命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。


二、代码已经提交到暂存区

Git 同样告诉我们,用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区:

$ git reset HEAD readme.txt Unstaged changes after reset: M readme.txt

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本


三、代码已经 push 到远程仓库

在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在 Git 中,我们用git log命令查看:


git log命令显示从最近到最远的提交日志


如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数


首先,Git 必须知道当前版本是哪个版本,在 Git 中,用HEAD表示当前版本

上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上 100 个版本写 100 个^比较容易数不过来,所以写成HEAD~100


以使用git reset命令:

$ git reset --hard HEAD^

可以指定回到未来的某个版本:

$ git reset --hard commitId


现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?

在 Git 中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到xxx 版本时,再想恢复到 yyy,就必须找到xxx 的 commit id。Git 提供了一个命令git reflog用来记录你的每一次命令:

$ git reflog


总结一下:

  • HEAD指向的版本就是当前版本,因此,Git 允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

发布于: 刚刚阅读数: 2
用户头像

秋天

关注

重新启程,修炼内功 2018.02.25 加入

还未添加个人简介

评论

发布
暂无评论
Git 如何回退代码_秋天_InfoQ写作平台