掌握 git reset 使用
通常我们提交代码一般都是 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 使用相关推荐
- git clean和git reset结合用法
git clean命令用来从你的工作目录中删除所有没有tracked过的文件 git clean经常和git reset --hard一起结合使用. 记住reset只影响被track过的文件, 所以需 ...
- git revert和git reset的区别
git revert 是撤销某次操作,此次操作之前的commit都会被保留 git reset 是撤销某次提交,但是此次之后的修改都会被退回到暂存区 具体一个例子,假设有三个commit, git s ...
- git reset到之前的某一个commit或者恢复之前删除的某一个分支
一.使用了git reset之后,想要找回某一个commit 1.git log -g 这个命令只能显示少部分的commit 推荐使用git reflog 找到想要恢复的那个commit的hash, ...
- git reset 怎么还原_git reset --hard 操作后的数据恢复
在进行正文之前先简单介绍下git reset 命令 git reset git reset 命令用于改变当前的仓库状态,简单的场景用例:假设一次修改了两个文件,然而需要对这两个文件分别进行两次提交,在 ...
- git reset 之后的后悔药
2019独角兽企业重金招聘Python工程师标准>>> git reset 之后再想恢复的话,就要用到git reflog. 执行git reflog. 执行结果: cab2545 ...
- git reset --hard xxxxxxx
关于git reset --hard xxxxxxx命令之Git版本回退 今晚代码写着写着就头脑有点发懵,手指也不听使唤了竟然让我敲出了 git reset --hard 命令,然后的然后就是之前所有 ...
- Git reset , revert, checkout的区别和联系
转自: http://www.cnblogs.com/houpeiyong/p/5890748.html 拿来做个笔记 git reset.git checkout和git revert是你的Git工 ...
- 如何使用'git reset --hard HEAD'恢复到之前的提交? [重复]
本文翻译自:How do I use 'git reset --hard HEAD' to revert to a previous commit? [duplicate] This question ...
- git 远程仓库版本的回退以及git reset 几种常用方式记录
由于 github push 了两个比较潦草的commit, 自己很不满意,又不想重新开vpn进行上传,所以找了一下相关的教程. 最后研究了一下,原理为先在本地还原到你想要的commit,然后强制pu ...
- Git的撤销操作 git reset HEAD -- <file>
在项目中我们也经常会使用到撤销操作 使用这一节我们就讲一讲Git的撤销操作 撤销操作主要有如下几种 git commit --amend 撤销上一次提交 并讲暂存区文件重新提交 g ...
最新文章
- redis面试全家桶
- 数据企业IBM段仰圣:大数据关键是“分析”
- 分公司访问列表(ACL)
- php日期差数,php如何计算日期差几天
- Tcp Keepalive和HTTP Keepalive详解
- 设计模式之装饰者模式(一)
- OSI强调:SSPL并不是开源许可证
- 原来数学才是世界上最浪漫的学科!
- RF脚本中的坑2: pip下载python库时报certificate verify failed
- Android 自定义 View
- Android:启动优化
- [Java 内存]Java内存组成
- Matlab中的参数解析
- RabbitMq中的warren模式和shovel模式
- pokers -end
- Day11:文件和异常
- ATMEGA8A-AU代理
- 致远小场景方案之从外部推送待办
- 激光网站有哪些及其介绍
- VBA——word中书签与VS的完美搭配
热门文章
- 15 岁黑进系统,发挑衅邮件意外获 Offer,不惑之年捐出全部财产,Twitter CEO 太牛了!...
- 比尔·盖茨退出微软董事会,回顾盖茨与微软的传奇故事
- 2020 年,嵌入式开发工程师的两大必知必会!
- 远程办公的破冰行动!
- 在创业公司工作不划算了!
- 程序员去交友网站找女友,结果意外了...
- 直接拿来用!GitHub 标星 5000+,学生党学编程有这份资料就够了
- 千年老二的 Python 值得学吗?
- AI 时代,中国技术创新如何弯道超车?
- 进击的程序媛:毕业于斯坦福,Google 元老级员工,曾任雅虎 CEO | 人物志