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. ps -ef | grep 查看进程命令

    通过 ps -ef | grep redis 查看当前Redis 的进程情况.

  2. Bootstrap table的基本使用总结

    最近在学习BootStrap构建页面,现记录BootStrap table 的一些基本使用如下: HTML文件: <!DOCTYPE html> <html> <meta ...

  3. Asp.Net WebApi开启Session回话

    一.在WebApi项目中默认没有开启Session回话支持.需要在Global中的Init()方法中指定会员需要支持的类型 public class WebApiApplication : Syste ...

  4. ip_conntrack参数

    ip_conntrack就是linux NAT的一个跟踪连接条目的模块,ip_conntrack模块会使用一个哈希表记录 tcp 通讯协议的 established connection记录,当这个哈 ...

  5. cannot ignore cache if it is not cached [ArcGIS Catalog 10]

    由于我把缓存重命名,重启地图服务,再Caching中不再显示地图缓存了,我直接创建新的地图缓存,没想到出现了: 不知道怎么回事. 只好,把缓存 重新改名成原来的名字,然后,删除缓存,再建立缓存.

  6. ASP.NET Razor 简介

    ylbtech-.NET: ASP.NET Razor 简介 Razor 不是一种编程语言.它是服务器端的标记语言. 1. 什么是 Razor?返回顶部 Razor 是一种标记语法,可以让您将基于服务 ...

  7. C#如何使用SplitContainer控件实现上下分隔

    C#如何使用SplitContainer控件实现上下分隔 Orientation 属性设置为Horizontal 完美世界 http://www.23cat.com/Contents_51864.ht ...

  8. 《mysql技术内幕 InnoDB存储引擎(第二版)》阅读笔记

    一.mysql架构 mysql是一个单进程多线程架构的数据库. 二.存储引擎 InnoDB: 支持事务 行锁 读操作无锁 4种隔离级别,默认为repeatable 自适应hash索引 每张表的存储都是 ...

  9. 第三十一章 elk(2)- 第二种架构(最常用架构)

    参考:http://linuxg.blog.51cto.com/4410110/1761757 最常用架构: 一.安装redis 1.下载:http://redis.io/download 2.解压后 ...

  10. 第二十八章 springboot + zipkin(brave定制-AsyncHttpClient)

    brave本身没有对AsyncHttpClient提供类似于brave-okhttp的ClientRequestInterceptor和ClientResponseInterceptor,所以需要我们 ...