一文看懂git reset与git revert

git reset与git revert都是常见的回滚代码的操作,那么它们有何不同呢?
本文将通过一系列步骤来研究reset与revert并分析二者区别,
所有操作均在main分支进行。

步骤一:初始化提交

初始化git仓库 -> 提交A -> 提交B -> 提交C
得到结果:
1
2

步骤二:reset

将提交回滚到A

git reset 306e695 --hard

关于--hard 参数的讨论放在文后

得到结果:
3
4
此时代码已经回滚到A,并且删除了B和C两个提交记录

步骤三:撤销回滚

重新来过,将代码回滚到C,为了演示revert

git reset 95fdfd5 --hard

得到结果:
1
2
此时最新提交回到了C

步骤四:revert

将代码回滚到A

git revert 306e695

冲突产生了!!!
解决冲突后产生新的提交D
得到结果:
在这里插入图片描述
在这里插入图片描述
此时最新提交走到了D,代码回滚到了A

结论

  1. git reset命令通常用于撤销上一次提交,回退到之前的版本,该命令会改变 Git 的历史记录。git revert命令会产生新的提交,并保留之前的提交历史记录。
  2. git reset通常在本地提交还未推送到远端仓库时使用,不产生新的提交,但会永久删除提交,有破坏性更新。git revert通常用于回滚包含远端仓库的提交,保留了历史提交记录,方便定位问题,比较安全。

补充

  1. --soft:仅重置 HEAD,保留所有文件更改在暂存区。
  2. --mixed默认,重置 HEAD 和暂存区,保留文件更改在工作目录。
  3. --hard:重置 HEAD、暂存区和工作目录,完全丢弃本地更改。
  4. 撤销git revert commitID的方法:git revert --abort
git resetgit revert 都是用于取消 Git 提交的操作,但它们的实现方式和效果有所不同。 git reset 是通过将分支指针移动到指定的提交来撤销提交。它有三种模式:soft、mixed 和 hard。 - git reset --soft 只移动分支指针,不修改工作区和暂存区的内容。这意味着你可以撤销最近的提交,并将修改保留在暂存区中,以便重新提交。 - git reset --mixed 是默认模式,它会将分支指针移动到指定的提交,并且会取消暂存区的内容。这意味着你可以撤销最近的提交,并将修改保留在工作区中,以便重新提交。 - git reset --hard 是最彻底的模式,它会将分支指针移动到指定的提交,并且会取消所有修改,包括工作区和暂存区。这意味着你可以完全撤销最近的提交及其修改。 相比之下,git revert 是通过创建一个新的提交来撤销指定提交的更改。它会在 Git 历史记录中创建一个新的提交,该提交会反转指定提交的更改内容。这样做的好处是可以保留历史记录的完整性,因为每个撤销操作都会生成一次新提交。 总结一下: - git reset 是直接移动分支指针来撤销提交,可以修改工作区和暂存区的内容。 - git revert 是创建一个新提交来撤销指定提交的更改,保留历史记录完整性。 使用哪个命令取决于你的需求和意图。如果你只是想撤销最近的提交并重新提交修改,可以使用 git reset。如果你希望保留历史记录完整性,并且希望以撤销提交的方式来反转更改,可以使用 git revert
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值