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
查看版本号:
使用命令git log查看提交历史,找到要回退到的目标版本号。
示例图片(略,参考提供的图片链接)。
回退到目标版本:
使用命令git reset --hard 目标版本号将版本回退到指定的目标版本。
示例图片(略,参考提供的图片链接)。
强制推送到远程仓库:
由于回退操作改变了本地仓库的HEAD指向,而远程仓库的HEAD可能还没有更新,因此需要使用git push -f(或git push --force)强制将更改推送到远程仓库。
示例图片(略,参考提供的图片链接)。
git revert
查看版本号:
同样使用git log查看提交历史,找到要撤销的commit的版本号。
示例图片(略,参考提供的图片链接)。
反做并提交:
使用命令git revert -n 版本号进行反做操作,但不会立即提交。-n选项表示不自动创建新的commit。
示例图片(略,参考提供的图片链接)。
然后使用git commit -m "版本名"手动提交这个反做的更改,生成一个新的commit。
示例图片(略,参考提供的图片链接)。
推送到远程仓库:
使用git push将新的commit推送到远程仓库。由于revert操作不会改变项目历史中的已有commit,因此不需要使用强制推送。
示例图片(略,但操作成功后,远程仓库会包含这个新的撤销commit)。
总结
在实际使用中,特别是在团队协作的环境中,应谨慎使用git reset,因为它可能会对其他人的工作造成较大影响。而git revert则是一个更为安全的选择,因为它不会改变项目历史中的已有commit。