精华内容
下载资源
问答
  • git reset 和 git revert
    2022-04-08 08:34:24

    一、问题描述
    在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset)、反做(revert)。

    二、背景知识
    git的版本管理,及HEAD的理解
    使用git的每次提交,Git都会自动把它们串成一条时间线,这条时间线就是一个分支。如果没有新建分支,那么只有一条时间线,即只有一个分支,在Git里,这个分支叫主分支,即master分支。有一个HEAD指针指向当前分支(只有一个分支的情况下会指向master,而master是指向最新提交)。每个版本都会有自己的版本信息,如特有的版本号、版本名等。如下图,假设只有一个分支:


    三、解决方法
    方法一:git reset
    原理: git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,如下图所示,假设我们要回退到版本一:

    适用场景: 如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。

    具体操作:
    1. 查看版本号:
    可以使用命令“git log”查看:

    也可以在github网站上查看:

    2. 使用“git reset --hard 目标版本号”命令将版本回退:

    再用“git log”查看版本信息,此时本地的HEAD已经指向之前的版本:

    3. 使用“git push -f”提交更改:
    此时如果用“git push”会报错,因为我们本地库HEAD指向的版本比远程库的要旧:

    所以我们要用“git push -f”强制推上去,就可以了:

    在github图形化界面上看,远程库的HEAD也已经指向目标版本:


    回退成功!
    方法二:git revert
    原理: git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。如下图所示:

    适用场景: 如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。

    具体操作:
    举个例子,现在库里面有三个文件:READ.md、text.txt、text2.txt。

    1. 查看版本号:
    可以通过命令行查看(输入git log):
    如图,最近的两个版本分别叫:“add text.txt”(即新增了文件text.txt)、“add text2.txt”(新增了文件text2.txt)。这个时候我们不需要text.txt这个文件了,那就是说不想要“add text.txt”那个版本的操作,那可以通过反做“add text.txt”这个版本来实现。

    也可以通过github网站图形化界面查看版本号:

    2.使用“git revert -n 版本号”反做,并使用“git commit -m 版本名”提交:
    (1)反做,使用“git revert -n 版本号”命令。如下命令,我们反做版本号为8b89621的版本:

    git revert -n 8b89621019c9adc6fc4d242cd41daeb13aeb9861
    1
    注意: 这里可能会出现冲突,那么需要手动修改冲突的文件。而且要git add 文件名。
    (2)提交,使用“git commit -m 版本名”,如:

    git commit -m "revert add text.txt" 
    1
    此时可以用“git log”查看本地的版本信息,可见多生成了一个新的版本,该版本反做了“add text.txt”版本,但是保留了“add text2.txt”版本:

    3.使用“git push”推上远程库:

    git push
    1
    查看github上显示的远程库版本信息:

    此时查看仓库的文件,剩下两个:READ.md、text2.txt

    更多相关内容
  • git revert

    2021-01-15 17:23:42
    git revert [--[no-]edit] [-n] [-m parent-number] [-s] [-S[<keyid>]] <commit>…​ git revert --continue git revert --quit git revert --abort git-revert - 反做版本库中已经存在的提交记录...

    git revert [--[no-]edit] [-n] [-m parent-number] [-s] [-S[<keyid>]] <commit>…​

    git revert --continue

    git revert --quit

    git revert --abort

    git-revert - 反做版本库中已经存在的提交记录,默认情况下反做某条记录后会产生一条新的记录。

     

    通过-n参数可以避免再次产生一条提交记录

    -m指定回滚的父节点(当回滚记录是由两分支merge产生)

    git revert与git reset的区别?

    git revert用于反做某个commit,而git reset是回退到某个commit。假设有四笔提交:commit1,commit2,commit3,commit4,当前HEAD指向commit4,

    (1)如果此时执行git revert commit2-hash就会撤销commit2提交,commit3和commit4不影响,默认产生一个commit 5,当前HEAD指向commit 5;

    (2)如果此时执行git reset commit2-hash,则会将HEAD指向commit2,后面的commit3和commit4直接没了。

    git revert --continue

    cherry-pick 或者revert因为冲突失败后,解决了冲突继续提交

     

    git revert --quit

    清除git revert 操作进度,在cherry-pick 或者revert因为冲突失败可以清除状态

     

    --abort

    Cancel the operation and return to the pre-sequence state.

    取消git revert ,回到上一步的状态

    展开全文
  • git reset 命令详解reset命令介绍参数补救git revert命令revert说明举例:命令 reset命令 介绍 git reset 命令格式为: git reset [ --soft | --mixed | --hard ] [< commitid >] 在git的这些命令中git reset...

    在这里插入图片描述

    reset命令

    介绍

    git reset 命令格式为:
    git reset [ --soft | --mixed | --hard ] [< commitid >]
    在git的这些命令中git reset是最长常用的,也是最危险的最容易被误用的。它的主要参数是:soft,mixed,hard它们告诉git,当执行reset是,要对index和working copy做什么。

    参数

    soft:
    –soft参数只将其它的commit重置到你选定的HEAD,index和working copy中的数据不变。
    mixed:
    –mixed参数是将HEAD和index重置到你选定的HEAD,而working copy不变。
    hard:
    –hard是将HEAD,index,working copy同时改变到你规定的commit上。
    注意:commitid是每次你要回退到的那个commit的id,它可以通过git log获取。

    补救

    如果我们通过git reset --hard将版本回退到之前的版本了,那我们还是可以补救的,先通过git reflog命令,找到要回退的commitId,然后通过命令:git reset --hard commitId来恢复。

    git revert命令

    revert说明

      由于某些文章说的说法可能不是很明确,所以导致一部分小袁同志们对revert有一定的误解,一开始我也很难理解revert到底是干什么的。毕竟用于版本回退的都已经有git reset了,为什么还要再出一个git revert?
      其实呢,revert它不会想reset一样”带你回到“那个你指定的提交,并假装那个提交之后的后续提交都没有发生。它是用于单个提交的逻辑否定 -并且单独提交- 保留后续提交

    举例:

    比如:
    我们有一个文件里面写了:

    提交A
    提交B
    提交C
    提交D
    

    第一次我们把它改成:

    提交A
    2提交
    提交C
    提交D
    

    并提交 假设commitId是tijiao1

    第二次我们把它改成:

    提交A
    2提交
    提交C
    4提交
    

    并提交 假设commitId是tijiao2

    之后我们进行revert:
    git revert tijiao1
    此时结果会变成:

    提交A
    提交B
    提交C
    4提交
    

    所以我们要知道revert是只撤回指定的提交,并保留后续的提交。
    如果你想让版本直接回退到tijiao1并且取消后续所有提交那你应该使用reset。

    命令

    revert分两种,因为commit分两种。
    一种是常规的 commit,也就是使用 git commit 提交的 commit;
    另一种是 merge commit,在使用 git merge 合并两个分支之后,你将会得到一个新的 merge commit,merge commit 和普通 commit 的不同之处在于 merge commit 包含两个 parent commit,代表该 merge commit 是从哪两个 commit 合并过来的。
    常规的revert:

    //撤回指定的任意提交
    git revert commitId
    //撤回最后一次提交
    git revert HEAD
    //撤回倒数第二次提交
    git revert HEAD^
    

    merge的revert:加上-m表示撤回哪一个分支的。它的数据是1或2.
    在这里插入图片描述

    //保留第一个分支为主线
    git revert -m 1 commitId
    
    展开全文
  • 场景 小明在分支 dev1 上开发,提交了 3 次(分别为 c1、c2、c3),发布时需要把 dev1 分支合并到 master 分支上,生成记录 m2,并...使用 git reset 会将 M1 之后的提交都回退掉,所有推荐使用 git revert. git re

    用法

    git reset

    用于回退版本,可以指定退回某一次提交的版本。直接删除指定的 commit 之后的记录。

    命令语法格式如下:

    git reset [--soft | --mixed | --hard] [HEAD]
    
    • --mixed 为默认,可以不用带该参数,不删除工作空间改动代码,撤销 commit,并且撤销 git add
    • --soft 不删除工作空间改动代码,撤销 commit,不撤销 git add
    • --hard 删除工作空间改动代码,撤销 commit,撤销 git add

    git revert

    用于重做(回滚)指定某一次提交的版本。不会删除 commit 和 history ,且会把这次操作作为一次最新的提交。

    命令语法格式如下:

    git revert [<options>] <commit-ish>
    

    区别

    1. git revert 是用一次新的 commit 来回滚(重做)之前的 commit ,git reset 是直接删除指定的 commit。
    2. 在回滚操作上看,效果差不多。但是在以后继续合并以前的老版本时有区别。 git revert 是用一次逆向的 commit (重做)之前的提交,因此以后合并老的分支时,会导致这部分改变不会再次出现,但是 git reset 是直接把某些 commit 在某个分支上删除,因而和老的分支再次合并时,这些被回滚的 commit 还会被引入。

    场景

    1. 小明在分支 dev1 上开发,提交了 3 次(分别为 c1、c2、c3),发布时需要把 dev1 分支合并到 master 分支上,生成记录 m2,并发布到线上。
    2. 小王在分支 dev2 上开发,提交了 1 次(c1),然后也把 dev2 分支合并到 master 分支上,生成记录m3,并发布到线上。
    3. 不幸的是,小名的 dev1 分支上存在 bug,需要回滚 dev1 上的所有提交。

    在这里插入图片描述

    解决

    使用 git reset 会将 M1 之后的提交都回退掉, 也就是 M2 和 M3 都会消失,这不符合现在的场景,
    所有推荐使用 git revert.
    git revert 会生成 M4,M4 上面就没有 dev1 的提交了。
    在这里插入图片描述
    注意
    当 dev1 分支的 bug 修改完成后,在合并到 master 时,之前被重做的内容是不会出现的,也就是 C1、C2、C3 的改变不会再出现,需要再次 revert 掉 M4,生成 M5 后再进行合并。
    在这里插入图片描述

    展开全文
  • git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销 作为一次最新的提交 git revert HEAD //撤销前一次 commit git revert HEAD^ //撤销前前一次 commit git r.
  • 使用git revert回退版本

    2022-03-12 21:28:52
    我在这篇文章中介绍了如何使用git reset命令回退版本。 使用git reset回退版本_new9232的博客-CSDN博客_git 回退到最新版本 但是这种方法只适用于同一个分支只有一个人在修改代码。如果同一个分支有多人修改代码时...
  • git revert 怎么使用

    2021-04-09 11:39:35
    git revert 是回退某个版本(之后的提交记录会保留并生成一个新的commit) 适用场景:如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。 具体...
  • git revert是个好东西

    2021-12-09 14:37:00
    revert大家用的比较少,很多细节可能不知晓,所以这次聊一下git revert的使用,希望大家不会用到它。
  • git revert这个操作用的比较少,如果分支支持强推那必然强推,不支持强推的情况,你就需要用这个命令,然后团队的人需要补一下使用该命令的坑。 注意点 比如你不小心将测试分支代码合并到master分支上。 当...
  • git revert 用法

    千次阅读 2020-10-28 16:32:13
    git revert 撤销某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销,作为一次最新的提交。 git revert HEAD 撤销前一次 commit git revert HEAD^ 撤销前前一次 commit git revert ...
  • git revert的使用

    2019-10-20 16:55:21
    git revert命令其实非常好理解,就是revert的含义,该命令会重新进行一次新的提交,只是提交的内容是会退某一次提交。 下面举例来说明。 有一个仓库,仓库的提交记录和文件分别如下图所示,该仓库有三次提交,每次...
  • git revert还原commit-id

    2022-04-14 21:42:56
    1. git revert 是什么? 还原至某个或某些commit-id之前更改 大意: 新建一个commit且将删除git revert [commit-id]中的’commit-id’中的内容(本质是反向git cherry-pick操作) 2. git revert 用法与实践 2.1 还原某个...
  • git revert】使用以及理解(详解)

    万次阅读 2020-12-18 15:50:43
    git revert B^…D 这样就把B,C,D都给revert了,变成: A-> B ->C -> D -> D’-> C’ -> B’ 用法就是: git revert OLDER_COMMIT^…NEWER_COMMIT 如果我们想把这三个revert不自动生成三个新的com
  • git revert 那这两个命令有何区别呢?先不急,我们后文详细介绍。 git reset 假如我们的系统现在有如下几个提交: 其中:A 和 B 是正常提交,而 C 和 D 是错误提交。现在,我们想把 C 和 D 回退掉。而
  • git revert主要用于还原一个或多个现有提交,并生成一条新的更改记录。 日常开发过程中,可能会出现要发版的时候,发现master分支上合并了这一期不需要发版的功能点,需要将这些提交还原。 以下是 git 官网 给出的...
  • git reset、git checkout、和 git revertgit撤销操作的常用命令; 用法示例: git reset --hard HEAD 表示回退到当前版本,HEAD指向当前版本。如果你修改了一些代码,想去除,就可以用git reset --hard HEAD一次...
  • 一、是什么git resetreset用于回退版本,可以遗弃不再使用的提交执行遗弃时,需要根据影响的范围而指定不同的参数,可以指定是否复原索引或工作树内容git revert在当前提交后面...
  • git revert详情使用

    千次阅读 2020-04-10 01:14:49
    描述一个git revert使用场景,加深一下对git revert的使用,场景如下: Step 1:小辉在分支dev1上开发,提交了4次(分别为c1、c2、c3、c4),发布时需要把dev1分支合并到master分支上,生成了提交记录m5,并发布到...
  • git revert 如果需要回退线上的代码,一般会通过git revert ${commit hash} 新添加一个提交,返回之前的版本。 相比 reset ,revert 会在提交历史中增加一个新的提交,而不会对之前的提交进行任何更改。 默认情况下 ...
  • git revert遇到merge

    千次阅读 2021-04-02 22:29:00
    因为此时git不知道要做什么。merge commit是两个分支的汇合点。本质上这两个分支地位是完全相等的。虽然从下边的图看来,似乎master是你想要的。但是话说回来,master也仅仅是个名字而已,与其他分支并无区别。另外...
  • git revert 撤销中间某次commit

    千次阅读 2022-01-25 16:41:26
    场景:在工作中,发现中间的某次提交是错误的,或者不再需要的代码,这个时候想要撤回那次commit,该如何呢? 假如远程仓库上有5次commit,如图: 我们的目的是想撤销第二次提交,也就是commit...git revert commit_id
  • 问题场景 公司使用gitlab作为代码管理工具,...然后等下个版本开发完成后,提交了mr,发现变动的文件只有revert之后的变动,第一次mr的文件改动都没有了(git revert后再次merge,git默认会丢弃这段代码)。 解决方案
  • git revert commit撤销提交
  • 如果我在develop分支 commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个...
  • 在版本迭代开发过程中,相信很多人都会有过错误提交的时候(至少良许有过几次这样的体验)。... git revert 那这两个命令有何区别呢?先不急,我们后文详细介绍。 git reset 假如我们的系统现...
  • tortoise git revert的坑

    2021-03-24 10:17:47
    文章目录事故操作1.tortoise gitrevert2.git checkout . && git clean -df3.git reset --hard参考 事故 git merge的时候,磁盘空间不足,失败之后,导致当前分支上很多修改,增加,删除的文件。这个时候的...
  • git revert 踩坑之路

    千次阅读 2020-01-21 15:18:15
    在实际的开发工作中,使用git总会遇到一堆问题,本文将结合具体例子,讲述在何种条件下会出发git revert失败以及解决的方案和措施。 准备工作 首先,创建一个git 仓库(repo),本人是在Mac环境下,Windows下打开git...
  • git revert后再merge

    2021-07-21 14:02:21
    在自己的分支上进行需求的开发 ...4、revert (2)的merge节点 5、自己的分支再次提交了C节点 6、向master合并的时候发现并没有AB节点的内容。 7、reset(6)操作,需要先revert (4)产生的节点 8、再次merge ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,956
精华内容 8,382
关键字:

git revert

友情链接: web_book.rar