git的 reset 和 revert 区别

这篇具有很好参考价值的文章主要介绍了git的 reset 和 revert 区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 案例

线上master分支不可信,需要回到某个分支;
但是很多人习惯把一个需求,分多次commit,于是会出现下面这种情况
git的 reset 和 revert 区别,git,github
基于这种情况,git revert 就不如 git reset好用,可以借助Idea,直接通过 git reset --hard 指向需要回退到的commit,然后随便找个地方,敲上一个空格,产生一次新的commit id,即可达到效果;
git的 reset 和 revert 区别,git,githubgit的 reset 和 revert 区别,git,github

2. git的 reset 和 revert 有啥区别?

2.1 问题背景

在某一次的上线中,发现有的同学,上线之后发现master 分支存在bug,线上回滚之后,在处理git仓库回滚分支时,因分不清
reset(重置)revert(恢复) 两者的区别,使用git reset回退之后,再与master merge时,发现master无变化,因为作为此次引入案例,分享一波;

先简单说一下,在提交到远程库之前我们使用git reset 命令完全可以满足我们 撤销操作的需求,如果操作已经提交到远程库,那只好使用 git revert 来提交一个新的撤销操作 撤销 需要撤销的那次commit

2.2 git的工作流

  • 工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的。
  • 暂存区:已经 git add xxx 进去,且未 git commit xxx 的。
  • 本地分支:已经git commit -m xxx 提交到本地分支的。

在将文件提交至远程端时,文件的提交需要经过git add、git commit及git push三个过程才能提交至git远程仓库。
我们平时修改文件在工作目录中,提交时先使用git add提交至暂存区,再通过git commit提交至本地仓库,最后才能使用git push提交至远程仓库。

2.2.1 在工作区的代码

git checkout -- .       # 丢弃全部

注意:git checkout – . 丢弃全部,也包括:新增的文件会被删除、删除的文件会恢复回来、修改的文件会回去。这几个前提都说的是,回到暂存区之前的样子。对之前保存在暂存区里的代码不会有任何影响。对commit提交到本地分支的代码就更没影响了。当然,如果你之前压根都没有暂存或commit,那就是回到你上次pull下来的样子了。

2.2.2 代码git add到缓存区,并未commit提交

git reset HEAD .  或者
git reset HEAD a.txt

这个命令仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何变化

2.2.3 git commit到本地分支、但没有git push到远程

git log # 得到你需要回退一次提交的commit id
git reset --hard <commit_id>  # 回到其中你想要的某个版
或者
git reset --hard HEAD^  # 回到最新的一次提交
或者
git reset HEAD^  # 此时代码保留,回到 git add 之前

2.2.4 git push把修改提交到远程仓库

2.2.4.1 通过git reset是直接删除指定的commit
git log # 得到你需要回退一次提交的commit id
git reset --hard <commit_id>
git push origin HEAD --force # 强制提交一次,之前错误的提交就从远程仓库删除
2.2.4.2 通过git revert是用一次新的commit来回滚之前的commit
git log # 得到你需要回退一次提交的commit id
git revert <commit_id>  # 撤销指定的版本,撤销也会作为一次提交进行保存
git commit -m "......." 
git push 

2.3 reset

git reset中有三个命令(–hard、–soft与–mixed);主要用于工作区、暂存区、本地仓库三个区域的文件提交撤回

git reset --hard xxx
  • hard (修改版本库,修改暂存区,修改工作区)

    • –hard HEAD~1 (或是版本号)意为将版本库回退1个版本,但是不仅仅是将本地版本库的头指针全部重置到指定版本,也会重置暂存区,并且会将工作区代码也回退到这个版本;
git reset --soft xxx
  • soft (修改版本库,保留暂存区,保留工作区)
    • –soft HEAD~1 意为将版本库软回退1个版本,所谓软回退表示将本地版本库的头指针全部重置到指定版本,且将这次提交之后的所有变更都移动到暂存区。

2.4 revert

git revert xxx

– git revert 也是撤销命令,区别在于reset是指向原地或者向前移动指针,git revert是创建一个commit来覆盖当前的commit,指针向后移动。

2.5 git revert 和 git reset的区别

  • git revert是用一次新的commit来回滚之前的commit,此次提交之前的commit都会被保留;
  • git reset是回到某次提交,提交及之前的commit都会被保留,但是此commit id之后的修改都会被删除;
  • git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
  • 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
  • git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

通俗易懂的说呢,就是git revert 是回滚当前此次的commit,回到上一个状态,就好比咱们习惯性用的Ctrl+z; 而git reset 是回到历史某个版本,它的commit是旧的,是历史的,而git revert 会产生新的commit,就这么回事文章来源地址https://www.toymoban.com/news/detail-842067.html

到了这里,关于git的 reset 和 revert 区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (详解踩坑)GIT版本回滚git stash、git reset、git reset --hard、git revert

    目录 背景 一、(git log、git reflog)查看git提交日志及命令历史 1.1 git log(提交日志)  1.2 git reflog(命令历史) 二、git reset(回退到指定的版本,并且保留更改) 2.1 回退到指定版本 2.2 快捷回退上一版本 三、git reset --hard(回退到指定版本,不保留更改) 四、git revert(回退

    2024年02月12日
    浏览(52)
  • git版本回退(git reset、git revert、git stash)

    本文 git 相关命令: git reset: 回退版本,可指定某一次提交的版本。 git reset [--soft | --mixed | --hard] commitId 。 git revert: 撤销某个提交,做反向操作,生成新的commitId,原有提交记录保留。 git revert commitId 。 git commit --amend: git commit –amend 既可以对上次提交的内容进行修改,也

    2024年02月08日
    浏览(56)
  • git代码回滚是使用reset还是revert

    时光不能回退,Git却允许我们改变历史。 想要让Git回退历史,有以下步骤: 快捷命令: 【注:HEAD是指向当前版本的指针,HEAD^表示上个版本,HEAD^^表示上上个版本】 如果修改到的文件比较少,我们可以不通过命令回滚的方式,手动删除之前的修改,再进行提交。 reset和reve

    2024年02月07日
    浏览(90)
  • 【git 使用】超级好用的 git reset 和 git revert 功能对比和使用方法

    首先你要知道 git 区分暂存区和工作区,如果你用过 sourcetree 你就会知道 git reset 命令用于将当前分支的 HEAD 指针移动到指定的提交,并且可以选择性地修改工作区和暂存区的状态。 git reset 命令有几种常用的用法,主要包括: git reset --soft commit-id:  被 reset 的提交会放到暂存

    2024年02月20日
    浏览(44)
  • idea中git相关知识(revert,reset,stash/unstash changes使用)

    白色:已经加入版本控制,已提交,无改动 蓝色:已经加入版本控制,已提交,有改动 绿色:已经加入版本控制,还未提交 红色:未加入版本控制 工作区,暂存区,版本库 ● 工作区:项目目录,开发存放代码的地方。 ● 暂存区:数据暂时存放的地方。待提交区,存放有

    2024年02月05日
    浏览(56)
  • git版本回退:revert回退其中一个提交/reset回退到某个版本

      对于已经push或没有push的,回退commit方式一致。只是最后push 的时候 ,如果修改了已经push 的commit,那么需要使用git push -f 区别:git reset commitID;  回退到某个版本。中间的版本都会回退。            git revert commitID; 只将commitID的代码回退。中间的版本不变。且会形成一条

    2024年02月12日
    浏览(48)
  • git reset soft mixed hard keep区别

    git reset 是 用于撤销之前的提交或修改仓库的状态。在使用 git reset 命令时,可以指定不同的模式来达到不同的效果。这些模式包括 --soft、–mixed、–hard 和 --keep。 该模式会将 HEAD 指向目标提交,但会保留目标提交之后的修改。此时,目标提交之后的修改会变成未暂存的修改

    2024年02月09日
    浏览(47)
  • git reset 四个模式:soft、mixed、hard、keep区别

    本地版本库 暂存区 工作区 soft 回退 保持 保持所有 mixed 回退 回退 保持所有 hard 回退 回退 完全回退 keep 回退 保持 保持另外的修改,仅回退提交的代码 git reset --soft 仅将本地版本库回退到指定版本,缓存区和工作区不做改变 git reset --mixed 将版本库回退的同时,将缓存区也清

    2024年01月19日
    浏览(42)
  • vs2019用git推送到github报错:Recv failure: Connection was reset

    详细报错信息: 正在推送 master 将分支推送到远程存储库时遇到错误: Git failed with a fatal error. Git failed with a fatal error. unable to access \\\'https://github.com/sfssa/MT4Library.git/\\\': Recv failure: Connection was reset 解决办法: Windows+R输入CMD打开命令行: 在命令行中输入:ping www.github.com,得到下图所

    2024年02月07日
    浏览(46)
  • 解决kali虚拟机连接github问题,git/‘: Recv failure: Connection reset by peer

    直接使用ssh连接方式,以下终端全部为kali虚拟机的终端 1、在终端中执行以下命令,将你的电子邮件地址替换为GitHub帐户关联的电子邮件地址。          ssh-keygen -t ed25519 -C \\\"youremail@example.com\\\"         这会在默认目录(通常是 ~/.ssh/ )中生成一个新的SSH密钥对 遇到输入

    2024年01月17日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包