git reset版本回退

reset可能出现的问题:使用Git作为代码版本管理工具,可能会遇到自己的错误提代码到线上,回退之后其他人再去pull的时候,代码并不会改变。

原因:虽然自己本地的代码已经回退了,但是别人已经把你的错误代码的版本下载了下来,然后别人重新pull你的新代码下来,然后重新提交的时候,别人会把他本地错误的代码又给重新push到远程仓库了。

解决方法:项目成员都执行:git reset --hard origin/master命令即可。

git reset 有三种模式,--hard模式会把工作区的内容也一起回滚。 --soft和--mixed模式本文不做介绍。

问题重现:

1.本地分表建立两个文件夹用于模拟两个git用户。先在gittest3中的hello.txt文件分别填写4次内容,然后执行git add .  git commit -m “提交信息” 执行完之后,在第四次commit之后执行git push 把本地项目推送到远程仓库。然后执行git log 命令查看本地git的提交历史如下:

2.在另外一个用户2下面执行git pull 把远程代码拉下来。这时候两个用户的代码版本都是一致的

问题情景:现在突然发现用户1下的代码提交错了,代码需要回滚到第二次提交的地方,这里有两种方法,可以用Reset也可以用Revert来回滚,简答的来说用Reset会把第三次和第四次提交的记录直接删掉,如果用Revert他会生成第五次提交,即把第二次提交的记录重新提交一次变成第五次提交,这里主要说Reset

命令如下:git reset --hard 01349564695c5d02d355ccbb14e9cfc5c368f46b

这时候发现用户1的版本已经回退到了第二次提交;但是用户2的版本仍然与远程的版本保持一致都是在版本4。

然后用户1把代码push到远程,发现远程仓库拒绝接收本次push过来的代码,这是因为用户1的版本比远程的版本低。

如果想解决这个问题,就必须使用git push -f 强制推送,推送成功如下图。

这时候用户2pull代码下来。这个时候可能很多人会认为pull下来的代码就是远程回滚后的代码了,其实并不是,pull之后的提示如下。

然后用户2执行git log查看提交历史如下,看到本地git的Head指向版本4,远程已经回退到了版本2。且用户2看到工作空间的文件仍然是版本4的内容。

这时候用户2如果不知道远程已经版本reset回退到了版本2,然后继续开发,修改了hello.txt,然后commit, 然后push

下图是用户2 push之前:

用户2Push之后再查看log,这时候看到用户2的文件执行都是在第五次提交。

这时候用户1再pull代码下来,然后查看log,发现代码版本已经去到了版本5。但是之前已经把版本reset为版本2,希望把版本3和版本4的东西都删除,但是又被用户1重新给推送了过来。

解决方法:

就是每个项目成员都需要执行git reset --hard origin/master ,然本地的git的版本与远程仓库的版本一致。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值