git reset

git reset的作用是还原Index的状态或改动本地分支HEAD的位置。

这个命令适合用于从某个提交点又一次开新的分支。比方,假设某个提交之后的代码我们都不要了,就能够在本地reset至指定commit,然后开一个新的branch继续新的开发(原来分支在远程上没有发生不论什么变化的)。

使用git reset是不影响远程分支的。一切都在本地发生。假设回退须要非常快影响远程分支的,应该使用git revert。

git revert

假如某些旧提交我们不想要了,而又不愿通过自己改动代码又一次提交的方式来完毕,这个时候我们就能够把这项工作交给revert命令。

Git Revert原理:依据你要回退的提交所做的改动做相反的改动,然后又一次提交代码,使代码达到没有这些旧提交所能达到的状态。

假设对于git revert的回退策略还没理解,这样讲或许你就能理解了:回退旧的提交必定会导致当前最新代码发生变化,比方之前某个提交加了一行代码,那么回退就是在同样位置减一行代码。Git不会真的把旧提交抛弃,假设直接抛弃,历史记录就追踪不到了。因此。旧提交事实上是没动的,Git仅仅是依据旧提交反着做了一遍,这才导致最新的代码发生了改变。

仅仅有把revert命令回退导致的改动又一次提交,revert命令才算真的完毕并生效。否则效果仅仅相当于改动了工作树的文件而已。

注意:revert之后须要push到远程分支上其它用户才干看到回退发生的改动。

使用git revert会出现的问题

由于git revert是用新提交覆盖旧提交,因此,被覆盖的提交等于不会被採用了。

假设两个分支(假设是master和A分支)先合并再用revert回滚。之后又合并(A合并到master),就会发如今master分支上,A分支第一次合并之前的改动大部分不见了。

这是由于从时间的发生顺序来看,A分支第一次合并之前的改动发生在revert之前,revert发生在后,而 revert抛弃了A第一合并之前的改动,那么再合并Git就觉得你永远抛弃了A第一次之前的改动。

要解决问题,须要把revert产生的提交再revert一次。

git reset与git revert比較的更多相关文章

  1. 代码回滚:git reset、git checkout和git revert区别和联系

    git reset.git checkout和git revert是你的Git工具箱中最有用的一些命令.它们都用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于提交,还可以作用于特定文件. 因为 ...

  2. git reset、git checkout和git revert的区别

    这三个git命令都是用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于commit层面,还可以作用于file层面Reset在commit层面,reset通过移除当前分支的一些节点来实现版本回滚; ...

  3. Git 相关问题分享,git reset与git revert的区别?

    1.如果我在git add 后想要撤销操作,该怎么做? 使用 git rm --cache [文件名/ *] 或者 git reset HEAD, 为什么这个命令也会有效果呢,实际上reset将 HE ...

  4. 关于git reset和git revert之前的区别

    很多时候,git新手容易误操作,比如,在levelIISZ-1.4.dev分支下,运行了git pull idc cpp-1.0的结果,这样做麻烦很大,经常导致maven项目格式不正确,这个时候,可以 ...

  5. git reset与git revert的区别

    http://alpha-blog.wanglianghome.org/2010/07/30/git-partial-rollback/ reset(版本撤回) 格式 git reset [-q] [ ...

  6. git reset 和 git revert 使用区别

    git reset 用于回退代码,但是git pull后会和远程分支保持一致,所以无法修改远程代码 git revert可以撤销代码,撤销后直接git push ,可以修改远程分支的代码

  7. git revert .vs. git reset .vs. git rebase

    1. git rervert的工作方式是:将一个老的commit的改动完全找出来,并且在新的tip处运行反操作,最终清除老commit的改动: git revert的应用场景多在对public rep ...

  8. git reset和git revert

    1 git reset commit-id 直接回到某次提交,该次commit-id之后的提交都会被删除. --hard,将index和本地都恢复到指定的commit版本. 2 git revert ...

  9. git reset 与 git revert的区别?

    一,git reset的功能: 该命令修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本, 说明: 修改后,push到远程仓库时需要使用"git push -f"提 ...

随机推荐

  1. Eclipse with ADT的安装和配置

    我们从安卓官方网站(https://developer.android.com/sdk/index.html#download)下载下来的eclipse是捆绑好了ADT的,所以不用自己安装插件,十分方 ...

  2. Easyui 页面设置加载完成之后,满屏

    js文件: if(top.location!=self.location){ top.location.href=self.location; }

  3. MongoDB单机, 主从, 分布式部署

    MongoDB是最易用的NoSQL,比较适合取代MySQL做一些存储,不过不是强一致性的.本文介绍一下MongoDB各种部署方式,并分享一些感受.前两部分“单机部署”和“主从部署”是“分片部署”的基础 ...

  4. Installing Hyperledger Fabric v1.1 on Ubuntu 16.04 — Part II &  Part III

    This entire tutorial is the second part of the installation of Hyperledger Fabric v1.1. In the previ ...

  5. [转]php使用 memcache 来存储 session

    转自:http://koda.iteye.com/blog/466667 Memcache和PHP memcach扩展安装请见http://koda.iteye.com/blog/665761 设置s ...

  6. boost并发编程boost::atomic

    三个用于并发编程的组件: atomic,thread,asio(用于同步和异步io操作)   atomic atomic,封装了不同计算机硬件的底层操作原语,提供了跨平台的原子操作功能,解决并发竞争读 ...

  7. 【转】QT中QDataStream中浮点数输出问题

    先上代码: C/C++ code   ? 1 2 3 4 5 6 7 8 9 10 11 12 13 int main(int argc, char *argv[]) {     QApplicati ...

  8. [转]使用HackCube-Special分析胎压传感器信号

    胎压无线传感器安全检测 我们团队之前也有用USRP和GNUradio对其他的胎压设备进行的安全检测,我不使用这套环境的原因是软件无线电的设备和笔记本已经算体积不小的一套设备,通常测试环境都在户外,在这 ...

  9. C++ assert 断言使用

    在研究corepattern需要让程序出core, 因此用到的assert, 记录一下. 写严谨代码时,也可以使用assert进行严格的条件判断.   函数原型: #include <asser ...

  10. tmux 终端分屏利器使用

    介绍 Tmux 是一个工具,用于在一个终端窗口中运行多个终端会话. 不仅如此,你还可以通过 Tmux 使终端会话运行于后台或是按需接入.断开会话,这个功能非常实用. 很好的工具,记录一下,以后要常用. ...