赞
踩
事情是这样,一个空仓库里面别人上传了个readme.md。然后本地Unity工程链接到这个远程仓库的时候出现了问题,推送和下拉都不行。推送的时候 提示远端有一些东西本地没有,要先下拉,下拉的时候又拒绝下拉,看报错意思是
Updates were rejected because the tip of your current branch is behind
该报错在git push时出现,一句话解释就是你在本地仓库上的修改没有基于远程库最新版本,你的本地仓库版本落后于远程仓库。(这个报错告诉我们在本地开发的时候,要经常使用git pull获取远程分支最新改动,这样才能保证在最终git push的时候本地commit历史和远程commit历史是一致的)
场景一:
起初本地仓库和远程仓库是同步的,然后某一天你在远程仓库上直接做了修改,此时远程和本地就不同步了。过了几天你在本地仓库做了一些修改,修改完成后使用git push想要提交,此时就会报错。
场景二:
起初本地仓库和远程仓库是同步的,不过有多个人都在该分支上开发,另一个人在某一天做了修改并提交到远程库了。此时远程库和你的本地库就不同步了。后续同场景一。
场景三:
git commit --amend之后,本地仓库和远程仓库的log版本历史不一致了,此时想要git push,也会报这个错。
个人理解: 使用该命令后,虽然所有提交记录的内容没变化,但最后一次提交的commit id变化了。git不允许push改变提交历史的操作,可以新增或者减少commit但不能改变原来的commit历史,因此会报冲突。
场景四:
开头描述的
git pull
//针对场景一和二,养成先pull最新代码再修改的习惯即可
//在修改本地代码前,先使用git pull拉取远程最新代码,然后再进行修改(推荐--rebase)
git pull 远程仓库名 远程分支名 --rebase
git push --force
//针对场景三,在确认代码无误的情况下,直接使用--force强制推送
//这个选项对于一些禁止了--force操作的仓库来说使用不了
git push 远程仓库名 远程分支名 --force
git pull origin master --allow-unrelated-histories
// 如果保证别人上传的和自己的不会互相影响,可以使用这个选项
git pull 远程仓库名 远程分支名 --rebase
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。