git revert 和git reset 的区别及使用方法

git revert 和git reset 的区别及使用方法
最新回答
酷炸小仙女

2022-12-02 09:52:10

git revert 和 git reset 的区别及使用方法

一、区别

  • git reset

    原理:修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本。这会导致HEAD之后的提交(commit)被移除,仿佛这些提交从未发生过。

    影响:会改变项目历史,可能会对其他人的工作造成影响,特别是当这些提交已经被推送到远程仓库时。

  • git revert

    原理:回滚某个特定的commit,但不是回滚“到”某个commit。它会创建一个新的commit,这个新的commit会撤销指定commit所做的更改。

    影响:不会改变项目历史中的已有commit,只是通过添加一个新的commit来撤销指定commit的更改。因此,对其他人的工作影响较小。

二、使用方法

git reset

  1. 查看版本号

    使用命令git log查看提交历史,找到要回退到的目标版本号。

    示例图片(略,参考提供的图片链接)。

  2. 回退到目标版本

    使用命令git reset --hard 目标版本号将版本回退到指定的目标版本。

    示例图片(略,参考提供的图片链接)。

  3. 强制推送到远程仓库

    由于回退操作改变了本地仓库的HEAD指向,而远程仓库的HEAD可能还没有更新,因此需要使用git push -f(或git push --force)强制将更改推送到远程仓库。

    示例图片(略,参考提供的图片链接)。

git revert

  1. 查看版本号

    同样使用git log查看提交历史,找到要撤销的commit的版本号。

    示例图片(略,参考提供的图片链接)。

  2. 反做并提交

    使用命令git revert -n 版本号进行反做操作,但不会立即提交。-n选项表示不自动创建新的commit。

    示例图片(略,参考提供的图片链接)。

    然后使用git commit -m "版本名"手动提交这个反做的更改,生成一个新的commit。

    示例图片(略,参考提供的图片链接)。

  3. 推送到远程仓库

    使用git push将新的commit推送到远程仓库。由于revert操作不会改变项目历史中的已有commit,因此不需要使用强制推送。

    示例图片(略,但操作成功后,远程仓库会包含这个新的撤销commit)。

总结

  • git reset:回滚到某个commit,此commit之后的所有commit都会一同消失回退,会改变项目历史。
  • git revert:将某一个commit反做,此commit内容会被撤销,并生成一个全新的commit,此commit保留了撤销的commit之前之后的其他commit,不会改变项目历史中的已有commit。

在实际使用中,特别是在团队协作的环境中,应谨慎使用git reset,因为它可能会对其他人的工作造成较大影响。而git revert则是一个更为安全的选择,因为它不会改变项目历史中的已有commit。