回滚revert和reset区别
分享请标明来自: https://www.css3.io/hui-gun.html 背景
git是一个庞大的工具,我们要开始扫盲一些常用的命令。回滚代码在项目中必然会遇到,下面我们介绍在git中如何回滚代码。 revert
假设有如下commit记录 A <- B <- C <- D
1
2
说明:尖头方向表示parent节点,及A <- B 表示先提交了A,再提交了B 情况一:现在不想要D了 git revert hash(D)
1
2
执行命令后会让填写 message, 相当于一次commit, 此时多了一次提交E,如下 A <- B <- C <- D <- E(revert)
1
2
D 这次的提交不会包含在E里面,于是回滚成功。 回到之前, A <- B <- C <- D
1
2
情况二:然后这次想回滚到C(注意是回滚到C,及 C、D都不要了) git revert hash(B)..HEAD
1
2
注意这个hash的取值,是B, 不是C的commit hash 执行命令后会让你填写2次message, 最后提交记录也有两次 A <- B <- C <- D <- E(revert) <- F(revert)
1
2
回到之前 A <- B <- C <- D
1
2
情况三:然后这次想回滚C(注意是回滚C,及 C不要了,但是D还需要),其实跟情况一是同样的 git revert hash(C)
1
2
执行命令后填写1次message A <- B <- C <- D <- E(revert)
1
2
小结: revert hash 这个hash为对应想删除的commit revert hash..HEAD 这个hash对应的commit不会被删除,会删除到它的后一次commit revert 会产生新的提交,并不会真正删除history。 reset
同样,假设有如下commit记录 A <- B <- C <- D
1
2
想删除到C(及C、D都不要了) git reset hash(B) --hard
1
2
注意,这里B的hash,而非C的。 执行命令后本地的commit history就被干掉了 A <- B
1
2
当执行 git push 的时候,会被提示不能提交。但凡修改历史跟origin有冲突的,都必须强项覆盖提交,这时大胆执行git push -f同步到origin. 这里reset –hard 表示暂存区,工作区都不需要保留回滚回来的代码。如果不加,会出现这种情况,比如 git reset hash(B) --hard, 那么删除掉的C, D的文件会进入工作区。 小节: reset 命令就不玩这么花了,因为这东西很危险,一般建议不允许在公共分支操作。试想下,如果你在公共分支删了几个history,可能会影响别人。 总结
如果在公共分支上回滚,那么revert应该是首选,reset就用在自己拉的私有分支(或者确定除了你自己,没人跟你用同一分支了。比如你个人的github master分支) 参考
https://github.com/geeeeeeeeek/git-recipes/wiki/5.2-%E4%BB%A3%E7%A0%81%E5%9B%9E%E6%BB%9A%EF%BC%9AReset%E3%80%81Checkout%E3%80%81Revert%E7%9A%84%E9%80%89%E6%8B%A9 https://www.atlassian.com/git/tutorials/merging-vs-rebasing?section=the-golden-rule-of-rebasing https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting
git log
git revert
git reset --hard HEAD~1
git push -f
回滚revert和reset区别的更多相关文章
- Git撤销&回滚操作(git reset 和 get revert)
转自:https://blog.csdn.net/asoar/article/details/84111841 git的工作流 工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 ...
- git revert和reset区别
1.在github上建立测试项目并克隆到本地 2.本地中新建两个文本文件 3.将a.txt commit并push到远程仓库 执行 git add a.txt, git commit -m " ...
- 代码回滚:git reset、git checkout和git revert区别和联系
git reset.git checkout和git revert是你的Git工具箱中最有用的一些命令.它们都用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于提交,还可以作用于特定文件. 因为 ...
- Git reset head revert 回滚
Overview 涉及Git一些日常操作 :) 基础知识 <Pro Git>至少了解branch,commit的概念,及基本的原理 Git常用魔法 存档:master代码回滚方法 我是QA ...
- git---远程仓库版本回滚
开发中,发现有错误版本提交带远程分支master,怎么处理? 1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回 ...
- Git使用小技巧之回滚和撤销
想要获取更多文章可以访问我的博客 - 代码无止境. 日常的开发,我们难免会创建错误的git提交记录,整个时候git给我们提供了两个命令来解决这个问题.一个命令是git reset,另一个是git re ...
- Git撤销、回滚操作
git的工作流 工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的. 暂存区:已经 git add xxx 进去, ...
- git 回滚方式
git push 命用于从将本地的分支版本上传到远程并合并. 命令格式如下: git push <远程主机名> <本地分支名>:<远程分支名> 如果本地分支名与远程 ...
- git本地文件回滚操作
今天有几个文件改在了其他分支上.需要回滚. 参考了下面两篇文章: Link Link 简单讲,分多个不同的阶段: 1. 用git status命令看,发现是unstaged,那么就是只在work ...
随机推荐
- IE的haslayout
haslayout 是Windows Internet Explorer渲染引擎的一个内部组成部分.在InternetExplorer中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元 ...
- 3-2 zk客户端连接关闭服务端,查看znode
使用ZooKeeper官方提供的Client来连接.路径类似的结构. 连接到我们的门户HOST. quota属于zookeeper.quota是子节点,zookeeper是父节点.quota其实是一个 ...
- Hibernate 执行sql语句返回yntax error: syntax error, expect LPAREN, actual NOT not
hibernate自动创建表时提示 : ERROR: sql injection violation, syntax error: syntax error, expect LPAREN, actu ...
- 大O表示法总结
大O符号用于计算机科学来描述算法的性能或复杂性.Big O特别描述了最坏的情况,可以用算法来描述所需的执行时间或使用的空间(例如在内存或磁盘上). 任何读过Programming Pearls(编程珠 ...
- Win32编程中如何处理控制台消息
这篇文章讨论如何处理所有的控制台消息. 第一步,首先要安装一个事件钩子,也就是说要建立一个回调函数.调用Win32 API,原型如下: BOOL SetConsoleCtrlHandler(PHAND ...
- EZOJ #82
传送门 分析 首先我们发现$k$位数实际就是一位的情况的$k$次方 考虑一开始的总方案数是$2^{nm}$ 我们每一次枚举其中有$i$行$j$列 对于这种情况的容斥系数为$(-1)^{i+j}$ 方案 ...
- Google B4网络阅读记录(翻译)
3.设计 这一章我们描述软件定义广域网架构的细节. 3.1.概述 我们的软件定义网络从逻辑上可以看做三层,如图所示, B4服务于多个广域网节点,每个节点都有很多服务器集群.在每个B4节点内,交换机硬件 ...
- AJAX的dataType问题
dataType是预期服务器返回的数据类型.如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML.在 1.4 中,JSON 就会 ...
- 8.8 Deep Learning Software
深度学习软件 -CPU vs GPU -Deep Learning Framework - Caffe / Caffe2 - Theano / TensorFlow - Torch / PyTorch ...
- UWP&WP8.1 基础控件——Grid
Grid是一个面板控件 Grid是UWP和WPF,WP8.1中最重要的一个控件,相当相当重要. 他是一个面板控件,是用来添加其他控件 但是呢 用法确实简单的很. 大概就这个样子. 你用工具箱拖, ...