第86天 Git的reset和revert有什么区别?它们分别适用于什么场景?
印象中是push和没push的区别
@dondonZh 啊?查漏补缺的时候来了
git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本
如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法
git revert的作用通过反做创建一个新的版本
如果我们想恢复之前的某一版本(该版本不是merge类型),但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。(摘自博客)
git reset
:将某次提交后的版本全部抹除;变动如下
O ------> O ------> O O ------> O
^ ^ ^ --[git reset HEAD^]--> ^ ^
版本 A 版本 B 版本 C [HEAD] 版本 A 版本 B [HEAD]
版本 C 造成的更改直接被抹除了,无法在提交记录上看出。
通常,在与他人协作开发时,将已经提交到远端的更改 reset 回去不是一个好主意。如果执意要这么做,那么 push 时应该加上 -f
选项用本地内容强制覆写远端。
git revert
:创建一次新的提交,将某次提交的更改撤销;变动如下
O ------> O ------> O O ------> O ------> O -------> O
^ ^ ^ --[git revert HEAD]--> ^ ^ ^ ^
版本 A 版本 B 版本 C [HEAD] 版本 A 版本 B 版本 C 版本 D [HEAD]
其中,版本 D 撤销了版本 C 的更改;它与版本 B 的内容是相同的。
适用场景:没有绝对的适用场景,也不存在什么最佳实践。符合你需求的就是最好的,或者你的团队用哪种你就用哪种。
Most helpful comment
git reset
:将某次提交后的版本全部抹除;变动如下通常,在与他人协作开发时,将已经提交到远端的更改 reset 回去不是一个好主意。如果执意要这么做,那么 push 时应该加上
-f
选项用本地内容强制覆写远端。git revert
:创建一次新的提交,将某次提交的更改撤销;变动如下