git错误提交处理方法踩坑

今天不小心把两个不该提交的文件合着其他正常提交的文件一起提交并立即推送了,回滚版本的过程中遇到一些小坑,在此记录。

git reset  回滚到某个版本(适用于错误代码仅本地提交,还没有推送到远端),对应sourcetree的操作为“重置当前分支到此次提交“

git  revert  回滚某个版本(反向提交,适用于已经把错误代码推送到远端),对应sourcetree的操作为“回滚提交”

 

1.如果已经不小心推送到了远端,恢复步骤如下(注意:这种情况不能直接revert,否则正确的需要被提交的代码也会丢失):

  (1)reset到提交之前的版本(丢弃本地更改),把两个误提文件的原先版本拷贝下来

  (2)回到最新版本,用拷贝的代码手动覆盖这两个误提交的文件到原先版本,然后重新提交

          如果直接使用命令行操作,也可以借助reset指令,向远端强制提交,参考博文    https://blog.csdn.net/Java_HuiLong/article/details/86144055?utm_medium=distribute.wap_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.wap_blog_relevant_pic&depth_1-utm_source=distribute.wap_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.wap_blog_relevant_pic

  sourcetree如何强制回滚到某个版本?

 

    1.sourcetree默认不允许强制推送,先要进行设置。

      

 

    2.选择某个分支,重置当前分支到此次提交,选择hard模式,强行合并

      

     3.强制推送,覆盖远端分支。

      

 

 

  

2.如果没有推送到远端,恢复步骤如下:

  (1)reset到提交之前的版本(合并本地更改),重新提交即可

 

3.如果不像我今天遇到的这么复杂(既提交了正确的代码,也提交了错误的代码),而是只仅仅提交了错误的代码,分两种情况讨论:

  1.已经推送远端  ->  git revert(回滚提交)

  2.没有推送远端 -> git reset(合并本地更改),重新提交

 

4.我今天遇到的这种有一部分文件不需要提交的情况,最正确的处理方式应该是:

  (1)把需要提交的代码正常提交,留下不准备提交的代码

  (2)把不准备提交,但是自己有用的代码贮藏下来

  (3)下次要用的时候,从贮藏中恢复,用完之后继续贮藏,等待循环使用

 

tips:

  记一篇关于git revert的暂时不太相信,感觉不可思议的文章,关于merge commit的revert事项              https://segmentfault.com/a/1190000012897697

 

 

今天又遇到一个需要版本回退的问题(2021/3/3)

现象及原因:

  idea内git插件使用遇到的异常:

  (1)有一次右下角的分支标记突然从1.0.2自动切换到master,发现及时,手动切换回来了。

  (2)3月2号下午提交代码,提示需要先pull,右下角的分支标记显示的1.0.2,但是pull的时候却把1.0.1的分支代码拉取下来了,并且还自动合并了,同时产生了很多冲突文件,以为是好几天没提交代码导致的,所以自己没有动过的文件选择全部接受他人代码(这一步导致大量文件全部变成了1.0.1版本上的代码),然后提交了。今天定位问题,才发现提交记录上显示的是merge origin/V1.0.1 into V1.0.2

解决办法:

1.强制回滚远端代码到昨天下午未提交前的tag 

  (1)注意!这一步非常重要!  先做好本地代码备份,重新从git上面拉取一份代码,防止第二步的强制reset让本地已经开发出来的功能代码丢失,下面的步骤全部是在新拉取的代码上做操作。

 

  (2)git reset --hard <commit id>   

  (3)git push  origin <分支名> --force

2.手动修复本地被污染的代码,把自己改动过的类保留下来,其他的改动全部丢弃。

 

改进方案:这个解决办法其实不是最好的,因为这次是发现的及时,在错误提交后,其他人的后续提交不多,如果是正规的解决办法,应该是把当次的错误提交进行revert。但是由于这是一次merge操作,所以直接revert的时候报错无法进行revert,这个

现象恰恰验证了上文提到的不太相信的那个博文,而且问题更加复杂,使用git revert - m 1 <commit id> 仍然不能正常revert,原因是存在冲突的代码,处理起来比较复杂,需要将两个分支的代码全部revert才行:

  1.先执行git revert - m 1 <commit id>

  2.解决冲突,然后git add -A ,git commit

       3.然后再执行git revert -m 2 <commit id>

  4.解决冲突,然后再次执行 git add -A,git commit

参考博客:https://blog.csdn.net/u013066244/article/details/79920012

 

posted @ 2020-12-28 23:09  红嘴鲤鱼  阅读(2243)  评论(1编辑  收藏  举报