git-reset

git-reset/revert命令:

git 分布式版本控制系统,强大的分支管理
工作区、暂存区(add)、本地仓库(commit)、远程仓库(push)
git reset :用于回退版本,可以指定退回某一次提交的版本。
git reset [–soft | --mixed | --hard] [HEAD]

  • –soft
  • –mixed 默认的可以不带,重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
  • –hard
    在这里插入图片描述
    在这里插入图片描述

1、git reset --soft:

  • 只回退了commit的信息。如果还要提交,直接commit即可
  • 如果还要提交,直接commit即可(修改的内容变成未add的状态),索引(暂存区)和工作目录的内容是不变的,
  • 在git reset三个命令中对现有版本库状态改动最小。
  • 修改内容还在,只是本次提交信息回退了,重新提交即可

2、git reset --mixed(git reset)

  • 修改内容还在,变成未add的状态
  • 需要重新git add 、git commit

3、git reset --hard

  • 彻底回退到某个版本,本地的代码也会变为上一个版本的内容,所有修改的内容都会丢失
  • 丢失本地修改
  • 可用这个命令来实现和远程强行reset,一定程度上解决提交时因为本地代码不是最新提交产生冲突的问题
    • git reset --hard origin/xxx
  • 一般本地执行git reset --hard,此时执行git push会报错,就是因为本地的代码比远程的旧,故要使用git push -f (强推)

4、注意:

4.1、恢复git reset —hard的误操作

  • 起因:不小心通过git reset —hard将版本回退到之前的commit
  • git reflog命令,找到要退回的commitId
  • 再次强行 git reset --hard commitId

4.2、git revert

  • commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,
  • 可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。如下图所示:
    在这里插入图片描述
  • 撤销之前某个版本,又想保留目标版本之后的版本
  • git revert -n 版本号(撤销的版本)----git commit -m 版本名”------git push

4.3、git revert 和 git reset的区别

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

4.4、HEAD 说明:

HEAD 表示当前版本

  • HEAD^ 上一个版本
  • HEAD^^ 上上一个版本
  • HEAD^^^ 上上上一个版本
  • 以此类推…
    可以使用 ~数字表示
  • HEAD~0 表示当前版本
  • HEAD~1 上一个版本
  • HEAD~2 上上一个版本
  • HEAD~3 上上上一个版本
  • 以此类推…

4.5、代码回滚

  • 工作区:
    • git checkout – a.txt # 丢弃某个文件
    • git checkout – . # 丢弃全部
    • 新增的文件会被删除、删除的文件会恢复回来、修改的文件会回去。这几个前提都说的是,回到暂存区之前
    • 对暂存区没有任何影响
    • 之前都没有暂存或commit,回到上一次pull
  • 暂存区:
    • git add到缓存区,并未commit提交
    • git reset HEAD .
    • git reset HEAD a.txt
    • 这个命令仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何变化
  • 本地仓库:
    • git commit到本地分支、但没有git push到远程
    • git log # 得到你需要回退一次提交的commit id
    • git reset --hard <commit_id> # 回到其中你想要的某个版本
    • git reset --hard HEAD^ # 回到最新的一次提交
    • git reset HEAD^ # 此时代码保留,回到 git add 之前
  • 远程仓库:
    • git push把修改提交到远程仓库
    • git reset是直接删除指定的commit
      1. git log # 得到你需要回退一次提交的commit id
      2. git reset --hard <commit_id>
      3. git push origin HEAD --force # 强制提交一次,之前错误的提交就从远程仓库删除
      4. 一般企业开发中不允许强推
  • git revert是用一次新的commit来回滚之前的commit
    • git log # 得到你需要回退一次提交的commit id
    • git revert <commit_id> # 撤销指定的版本,撤销也会作为一次提交进行保存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值