赞
踩
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的版本与远程仓库的版本一致。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。