Git恢复之前版本的两种方法reset、revert异同和分析

在Git中,resetrevert 都是用来回到某个历史版本的工具,但它们的行为和适用场景有很大的不同。让我们通俗地讲解一下它们的异同:

1. Git reset(适用于提交未推送)

reset 用来撤销提交并将当前的状态回到指定的版本。它不仅影响 Git 历史记录,还会改变工作目录和暂存区的内容。

  • 用途: 用于完全“重置”到某个提交,撤销之后的所有更改。

  • 命令示例: git reset --hard <commit_id>

    • --hard 表示工作目录、暂存区以及Git历史都会被修改,回到指定的提交。
    • --soft 只改变Git历史,工作目录和暂存区保持不变,适用于想保留更改但撤销提交的情况。
    • --mixed 默认方式,改变Git历史,工作目录不变,暂存区会重置。

 

默认重置head,当前版本,也可指定版本号

 

  • 举个例子: 假设你提交了一些代码,但后面发现有错误。你想要完全丢掉这些提交并回到之前的版本。你可以用 git reset 将 Git 历史回到一个指定的提交。reset 会让那些提交在Git历史中消失,像是从未发生过。

  • 适用场景:

    • 本地开发阶段,当你想彻底撤销最近的几个提交。
    • 如果你想保留一些更改,但不想把它们提交到Git历史中。

2. Git revert(适用于已推送,保证历史记录存在,避免结构式的破坏)

revert 的作用是生成一个新的提交,用来撤销之前某个提交的影响,而不会改变历史记录。它更像是做一个“撤销操作”,会保留之前的提交记录,但通过新的一次提交来反转代码的状态。

  • 用途: 用来撤销某个提交的效果,但保持Git历史记录的完整性。

  • 命令示例: git revert <commit_id>

    • git revert 会创建一个新的提交,反向应用某个提交的变更。

 

  • 举个例子: 假设你提交了一些代码,但发现其中有一部分是错误的,想要撤销。你不希望改变Git历史,只希望把这个错误的提交反向操作,这时可以使用 git revert。这样做后,Git会记录一个新的提交,表示撤销之前的提交。

  • 适用场景:

    • 在公共的Git仓库中工作时,其他人可能已经拉取了你的提交,不可以改变历史。
    • 需要撤销某个提交,但不希望丢失历史记录,尤其在团队协作中比较常见。

总结异同:

特性resetrevert
影响历史会改变Git历史记录,删除指定提交后面的所有提交保留Git历史,通过新提交来反向撤销指定的提交
影响工作目录可以修改工作目录和暂存区内容不修改工作目录和暂存区,仅生成一个新提交
适用场景本地开发时的撤销,想要彻底回到某个版本需要保持历史记录完整,撤销提交影响而不改变历史

使用场景

  • 如果你在本地修改了代码并希望完全撤销之前的提交,可以使用 git reset
  • 如果你在团队中协作,或者你希望保持历史记录完整,并且仅撤销某个提交的内容,那么应该使用 git revert
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值