通常我们提交代码一般都是 git add ,git commit -m, git push 的这么个流程。添加到暂存区,提交到 git 库生成版本号,push 到远程仓库以供他人可以使用。这是一个完整的且非常顺利的流程。但是往往实际开发中并不是这么顺利,总会出现这样或那样的问题。

git reset 就是当我们提交了错误的内容后进行回退使用的命令。git reset + 版本号,就是回退到该版本号上。

通常我们使用 git reset HEAD 就是回退到当前版本。git reset HEAD^ 回退到上一版本。

如我们 git add 一个文件这时我们发现添加了错误的内容,此时我们只是做了add 操作,就是将修改了内容添加到了暂存区,还没有执行commit,所以还没有生成版本号,也没有当前的版本号对应的内容,所以我们只需要将代码回退到当前版本就行。

git reset HEAD 可以理解就是去除掉添加到暂存区的内容。

以上的场景是 add 后还没有 commit 的,下面我们看一下已经 add 并且 commit 之后的该如何回退。

如果我们已经 commit 了,还没有 push,push的内容我们先不管,push 这个命令其实和提交没关系,他只是推送到远程了,如果 push 了,也就是我们回退了之后,再重新 push 一下而已,所以请不要纠结 push 这个操作。他和提交版本其实没有关系的。

回归话题。我们已经 commit 了,说明已经生成了最新的版本号了,此时我们想回退,则肯定是回退到之前的一个版本了,如果你知道前一个版本的版本号,git reset + 版本号,这样就可以了,但是一般我们不会去记版本号的,当然你可以执行 git log 命令去查到。git 为我们提供了一个更简单的回退上一个版本的方法 git reset HEAD^。

此命令专门用于回退到上一个版本,如果你的错误路程已经走的很远了,仅仅回退上一个版本可能也解决不了了,那就需要查找日志,找到对应的版本号进行 git reset + 版本号,进行回退了。

如果你中间部分的提交代码出错了,比如考虑这个例子,我们提交了 6 个版本,其中 3 包含了错误的代码需要被回滚掉。同时希望不影响到代码的第 1,2,4,5,6 次提交。

使用 git revert + 版本号,可以撤销指定的提交,这样就可以撤销中间部分提交的错误代码了。注意单词一个是 reset 一个是 revert ,不要搞混淆了哦。

这里再提一下特殊情况,如果你使用 git reset HEAD^ 回退上一个版本,此时发现我又不应该回退,认为这次操作是个错误的选择,那么我们可以再执行一次这个命令,代码又回来了,这个就是特殊情况了。

还有一个类似的 git reset --hard HEAD 命令,注意这里加了个 --hard 参数。

注意,这里和没有 --hard 是有区别的啦,有了参数 --hard ,直接把工作区的内容也修改了,不加 --hard 的时候只是操作了暂存区,不影响工作区的。

可以使用这个命令清除代码,当我们实验一种思路,或者跟朋友讲代码时,我们可能会随意的修改代码。而当我们回到正常的开发时,我们需要一个干净的工作目录,即保证目前工作目录跟Git最后一次 commit 的文件是一致的。我们可以这么做。

如果你的代码没有添加到暂存区,只是在工作区中修改,可以使用 git checkout . 放弃所有的文件修改。因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。自己手动删除就好了。如果手动删除麻烦,那么没关系,可以使用 git clean -df 命令,删除当前目录下没有被 track 过的文件和文件夹。

git clean 经常和 git reset --hard 一起结合使用,记住 reset 只影响被 track 过的文件, 所以需要 clean 来删除没有 track 过的文件,结合使用这两个命令能让你的工作目录完全回到一个指定的 commit 的状态。

上面两个命令都会清除工作区里面的内容,但是清除之后没法还原,尽量少用会丢失文件的操作,除非你能够确定不再需要这些文件。其实我们可以把代码暂存起来,然后在下次需要的时候可以恢复。

git stash 会把所有未提交的修改都保存起来,用于后续恢复当前工作目录。通过 git stash 命令推送一个新的储藏,当前的工作目录就干净了。重新应用缓存的 stash 可以通过 git stash pop 命令恢复之前缓存的工作目录。

掌握 git reset 使用相关推荐

  1. git clean和git reset结合用法

    git clean命令用来从你的工作目录中删除所有没有tracked过的文件 git clean经常和git reset --hard一起结合使用. 记住reset只影响被track过的文件, 所以需 ...

  2. git revert和git reset的区别

    git revert 是撤销某次操作,此次操作之前的commit都会被保留 git reset 是撤销某次提交,但是此次之后的修改都会被退回到暂存区 具体一个例子,假设有三个commit, git s ...

  3. git reset到之前的某一个commit或者恢复之前删除的某一个分支

    一.使用了git reset之后,想要找回某一个commit 1.git log -g  这个命令只能显示少部分的commit 推荐使用git reflog 找到想要恢复的那个commit的hash, ...

  4. git reset 怎么还原_git reset --hard 操作后的数据恢复

    在进行正文之前先简单介绍下git reset 命令 git reset git reset 命令用于改变当前的仓库状态,简单的场景用例:假设一次修改了两个文件,然而需要对这两个文件分别进行两次提交,在 ...

  5. git reset 之后的后悔药

    2019独角兽企业重金招聘Python工程师标准>>> git reset 之后再想恢复的话,就要用到git reflog. 执行git reflog. 执行结果: cab2545 ...

  6. git reset --hard xxxxxxx

    关于git reset --hard xxxxxxx命令之Git版本回退 今晚代码写着写着就头脑有点发懵,手指也不听使唤了竟然让我敲出了 git reset --hard 命令,然后的然后就是之前所有 ...

  7. Git reset , revert, checkout的区别和联系

    转自: http://www.cnblogs.com/houpeiyong/p/5890748.html 拿来做个笔记 git reset.git checkout和git revert是你的Git工 ...

  8. 如何使用'git reset --hard HEAD'恢复到之前的提交? [重复]

    本文翻译自:How do I use 'git reset --hard HEAD' to revert to a previous commit? [duplicate] This question ...

  9. git 远程仓库版本的回退以及git reset 几种常用方式记录

    由于 github push 了两个比较潦草的commit, 自己很不满意,又不想重新开vpn进行上传,所以找了一下相关的教程. 最后研究了一下,原理为先在本地还原到你想要的commit,然后强制pu ...

  10. Git的撤销操作 git reset HEAD -- <file>

    在项目中我们也经常会使用到撤销操作 使用这一节我们就讲一讲Git的撤销操作 撤销操作主要有如下几种 git commit   --amend        撤销上一次提交  并讲暂存区文件重新提交 g ...

最新文章

  1. redis面试全家桶
  2. 数据企业IBM段仰圣:大数据关键是“分析”
  3. 分公司访问列表(ACL)
  4. php日期差数,php如何计算日期差几天
  5. Tcp Keepalive和HTTP Keepalive详解
  6. 设计模式之装饰者模式(一)
  7. OSI强调:SSPL并不是开源许可证
  8. 原来数学才是世界上最浪漫的学科!
  9. RF脚本中的坑2: pip下载python库时报certificate verify failed
  10. Android 自定义 View
  11. Android:启动优化
  12. [Java 内存]Java内存组成
  13. Matlab中的参数解析
  14. RabbitMq中的warren模式和shovel模式
  15. pokers -end
  16. Day11:文件和异常
  17. ATMEGA8A-AU代理
  18. 致远小场景方案之从外部推送待办
  19. 激光网站有哪些及其介绍
  20. VBA——word中书签与VS的完美搭配

热门文章

  1. 15 岁黑进系统,发挑衅邮件意外获 Offer,不惑之年捐出全部财产,Twitter CEO 太牛了!...
  2. 比尔·盖茨退出微软董事会,回顾盖茨与微软的传奇故事
  3. 2020 年,嵌入式开发工程师的两大必知必会!
  4. 远程办公的破冰行动!
  5. 在创业公司工作不划算了!
  6. 程序员去交友网站找女友,结果意外了...
  7. 直接拿来用!GitHub 标星 5000+,学生党学编程有这份资料就够了
  8. 千年老二的 Python 值得学吗?
  9. AI 时代,中国技术创新如何弯道超车?
  10. 进击的程序媛:毕业于斯坦福,Google 元老级员工,曾任雅虎 CEO | 人物志