sourceTree回滚提交 和 重置当前分支到此次提交 的区别
sourcetree是现在比较火的git可视化工具,今天中午刚睡醒精神朦胧,提交了本地分支的版本,然后发现好像提错了,回滚,后来发现又没有提交错,可是回滚了代码又都没了,整整一个大模块。。。懵逼了。。。一时也不知道咋处理了,后来抱着试试的心态又重新回滚了一次,这下代码回来了,差点没吓死。。。现在总结一下回滚代码和重置的区别
这是两个过程:
回滚——是指将改动的代码提交到本地仓库,但未推送到远端仓库的时候
也就是说刚刚提交代码,没有推送,这时候你发现提交错了,只需要选择本地分支你刚提交的节点上,右击回滚一下即可,这时候本地分支会出现“Revert”的字样,推送按钮会出现提示推送的角标,这时候你可以直接推送一下,远端也不会有变化,只不过是推送一些日志记录或者其他与代码无关的,或者也可以提交好正确的代码后,一起推送。
还有一种狗血的情况就是我刚才说的,回滚后发现没有错误...(贼尬)...这时候刚写的代码已经没了...那就索性再回滚一次,也就是说撤销刚才的回滚操作,这时候本地分支节点上会出现“Revert 'Revert '”的字样...推送按钮也会出现提示推送的角标,这时候可以仿照上一步后半部分操作。
2、重置当前分支到此次提交——是指将改动的代码提交到本地仓库后,并已推送到远端仓库的时候
- 2-1、如果你发现推送了错误的代码,又不想重新写正确的,提交推送覆盖错误代码的话,就可以使用“重置当前分支到此次 提交”,选择刚刚推送分支节点的前一个或者某个节点,右击-->“重置当前分支到此次提交" ,此时会让你选择使用模式 “软合并---保持所有本地改动”——是指本地仓库将会重置到此次提交的节点,并且大于此次节点的本地仓库改动的代码 将会回退到你的文件状态里的暂存区(如下图)
- 2-2、“强行合并--丢弃所有改动过的工作副本”——如果使用此模式 ,本地仓库将重置到此次提交的节点,并且大于此次节点的本地改动的代码将会删除,重置完后,此节点会提示落后于远端仓库n个版本,(n取决于你重置节点的选择,或者说你要删除的代码变动节点区间),这时候有两种选择
- 2-2-1、选择一:在刚刚重置的节点上新建分支,重写正确的代码,然后推送到远端的新分支,回头再把这个旧分支的删掉 (这样做怪麻烦...)
- 2-2-2、选择二、刚刚完成重置节点后,提示落后于远端仓库n个版本,此时本地仓库里已经把这些落后的版本的代码改 动删掉了,按理来说推送此分支到远端即可,但是没有推送提示,只有拉取(后来想想可能因为会冲突,因为远 端的还没删),那该怎么办呢,答案就是选择此分支远端最新节点(注意是标注origin的),同样右击--->重置当前分支 到此次提交,这样就会重置远端分支,此时一定要特别注意:使用模式选择——软合并 – 保持所有本地改动,因为 我们刚刚重置本地分支,已经把本地要删除的代码删掉了,虽然提交的记录还在,此时本地仓库已经算是改动了, 所以重置远端仓库选择软合并 – 保持所有本地改动,就会把本地仓库改动同步到远端,那么远端仓库也会删除本地 仓库删除掉的那些代码(重置的那些节点)。这样就大功告成啦!还有就是如果你是修改,那么就在重置本地仓库节 点的时候,使用模式选择——“软合并-保持所有本地改动”,你会在文件暂存区里看到回退的文件(2-1),此时不要 急于修改并提交,和上面一样,要先重置远端最新分支节点,然后再修改你要修改的代码,一起提交推送即可!