如果大家使用同一个分支,终会出现一个人上传代码后,覆盖掉远程代码,导致其他人拉取失败的问题。
这个时候,除最终上传代码的人外,其他人想上传代码那几乎不可能,即使时上传者本人,也只能在原有的基础上,做修改。
总之,正常的方法,在此时是无法覆盖远程代码的了。
暂缓先不说出现这个问题的原因,只说解决办法。
一,版本回退,拉取失败,那就强制拉取(我的理解 )
git pull --rebase 远程主机名 远程分支名
远程主机名默认origin .
例如:
git pull --rebase origin dev
代表拉取远程节点到本地库,并且合并。
也就是说,远程库的操作记录和本地的合并了。
这个时候,输入
git log
查看历史版本号,复制,英文状态下的q退出git log。
输入
git reset --hard 版本号
回退到对应的版本
再输入
git push origin dev -f
采用强制推送。此时就可以覆盖掉远程的代码了。
需要注意的是,这种方法会丢失在这个版本之后的修改,而且,导致上传覆盖代码的人会丢失远程修改,这个时候,在确保覆盖代码的人代码正确前不允许其上传,不然还是会覆盖。
如果说那个人要重写,少了,无所谓,多的话,就不好办了。好在有一个补救的法子
执行之前的几步操作,现在远程库应该是正确的
之前覆盖代码的人执行命令
git pull --rebase origin dev
拉取远程的操作记录到本地并合并。git log一下,看看是否有了远程其他小伙伴的操作记录。
有的话,就可以push上去了。
如果不行,那只能另建文件夹悲催的复制粘贴了。或者重写。
二,就是确定自己电脑的版本无误,直接强制推送。
强行推送一波,覆盖掉服务器上的代码
git push origin dev -f
好了,现在来说一说为什么会出现这个问题,
当我们进行提交操作时,是将我们所在分支指向前一个节点,push操作时,会将我们所有节点上传,远程分支会合并我们的分支,就是将原有的指针直接指向最新节点,当提交次数过多时,git会认为所提交的所有文件都是最新版。会覆盖掉原有的文件。
那么我们在平时的编辑中就应该注意
1. 每次修改前先拉取,保证自己的代码是新的代码。以防冲突过多而不得不放弃修改。
2. 减少提交的次数,将改好的文件放置暂存区中,确保无误后在提交至版本库中。
在这里给出 github 上一个非常好的 Git 错误解决的文章。
https://github.com/k88hudson/git-flight-rules