通常我们提交代码都是在IDE上完成,但有时候也会通过命令方式完成,但无论哪种方式,由于开发环境以及使用者的一些原因,都有可能出现远程push问题,现在演示一种正常流程:
git clone {git仓库url} //把远程仓库的代码复制到本地
........ //本地进行代码修改或增加删除后
git add ./* // 提交代码到本地暂存区
git commit -m '提交的消息' //提交代码到本git地仓库
git push //提交代码到远程仓库
通常使用上述命令可以顺利完成代码的下载、更新、上传,不会有什么问题(这里暂不考虑多人操作的场景),这主要是执行这些命令其实它背后有一些默认的约定在里面,正常情况下是符合这些约定的,所以操作可以正常完成。
但是再来看下面这个场景,有可能我们是直接拷贝了别人的一份代码到自己电脑下的某个目录,再按上面的操作来进行就会不灵了。可能会报以下问题
这个问题主要根源是COPY别人的项目,那项目下的.git目录也是别人的git版本信息,所以出问题难免的,如果在这种场景下,我们对整个git原理有清晰的了解,就不难解决:
1. 先把copy过来的项目下的.git 目录删除,当前如果没有就可省略这一步,这样当前的项目就和 git 解除了关系。
2. 在项目目录下,执行 git init ,主要用来初始化一个空的git本地仓库。执行完上面的命令,当前目录下会自动生成.git隐藏文件夹,该隐藏文件夹就是git版本库
3. 执行命令对远程git仓库进行映射,映射前可以 git remote -v 查看下当前是否已有映射
git remote add {别名} {远程仓库URL}
4. 执行以下命令完成让远程仓库强制覆盖本地仓库的合并(由于是重新git init初始化了本地仓库,所以需要这个操作),否则push时可能报 fatal: refusing to merge unrelated histories 的错
git fetch --all //拉取所有更新,不同步; git reset --hard origin/master // 本地代码同步线上最新版本(会覆盖本地所有与远程仓库上同名的文件),要注意origin需要替成实际的别名 git pull // 这个命令是为了保险再执行一次拉取
5. git push --set-upstream {远程仓库分支} // 一般可以这样 {别名} + 空格 +{远程分支名}