携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第35天,点击查看活动详情
reset帮你重新提交
在代码协作的过程中,偶尔会遇到这样的情况:
忘了先同步代码git pull再进行提交,就会出现领先远程一个提交,同时又落后远程一个提交的情况:
比如图里这个就是当前分支领先了远程“编译参数修改”这个提交,又落后于“处理未实现的防抖问题”这个提交,当然一般这种情况下,在一些图形化工具(比如vscode的git插件)中,点击一下按钮即可完成同步,不过,这个原理是什么呢?
首先执行了git reset [远程提交哈希]命令,将HEAD重新指向最新的远程提交,并同时放弃这次领先的本地提交:
那我的代码不会消失掉吗?答案是不会的,git reset这个命令接受三种参数:
- --mixed 默认参数,会保留放弃提交的文件修改,但不会将其加入暂存区
- --soft 会保留放弃提交的文件修改,并将其加入暂存区
- --hard 会删除放弃提交的文件修改,慎用用完这个你的代码真的消失了
这个时候,本地和远端分支就实现同步了,这个时候,再将文件加入到暂存区,再次进行commit即可(或者你直接使用了--soft,那么直接commit操作就好了):
这时候就只有本地领先远端一个提交了,直接git push即可。
revert帮你反向提交
reset可以抹去某一次提交,那么,如果说我这次的提交还想记录下留着日后使用该怎么办呢,那git revert就派上用场了,我们首先做一次胡乱的提交:
这时候,运行git revert HEAD,当然这个HEAD也可以换成对应提交的哈希,我们看见:
多了一条提交,而提交的内容正好就是被revert的那次提交相反的代码,也就实现了将代码恢复回来并将被恢复掉的更改保存下来的效果。