网站设计申请书学院网站建设情况
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
 - 一、本地仓库关联远程仓库
 - 1. 先查看本地是否已有远程关联(可选)
 - 2. 关联远程仓库
 - 3. 验证关联是否成功
 
- 二、设置上游分支
 - 1. git pull
 - 错误原因
 - 解决方案
 - 自动设置上游分支(可选)
 
- 2. git push -u origin master
 
- 三、拉取远程仓库
 - 1. git pull
 - 2. git pull origin master
 
- 总结
 
前言
现有一个本地仓库,里面有若干次提交,想要将这个仓库上传到远程仓库,现在能想到的几个方法:
- 1.git clone远程仓库到本地,然后把本地仓库的文件拷贝到这个clone的本地git仓库,上传远程仓库
 - 2.本地仓库关联远程仓库后直接上传
 
第一种是个笨方法,而且无法保留之前本地仓库的历史版本,不推荐不介绍
第二种方法应该是正常使用的方法,但有几个注意点:
- 1.本地仓库分支与远程仓库分支一致,且远程仓库为空仓库;最理想状态,本地仓库关联远程仓库后直接推送即可。
 - 2.本地仓库分支与远程仓库分支一致,但远程仓库不为空,如有readme文件;使用时有注意点,本文介绍。
 - 3.本地仓库分支与远程仓库分支不一致,后面再写一篇介绍。
 
提示:以下是本篇文章正文内容,下面案例可供参考
一、本地仓库关联远程仓库
本地仓库未关联远程仓库时,执行git push会报下面错误:
fatal: No configured push destination.
 Either specify the URL from the command-line or configure a remote repository using
git remote add <name> <url>
 
and then push using the remote name
git push <name>
 
这个错误提示说明你的Git仓库还没有配置推送目标(远程仓库)。解决方法很简单,你需要先配置一个远程仓库,然后再执行推送操作。
确保你已经在远程代码托管平台(如GitHub)上创建了对应的仓库,并且拥有推送权限。将本地仓库与远程仓库关联的步骤如下:
1. 先查看本地是否已有远程关联(可选)
git remote -v
 
如果已有关联,会显示远程仓库的信息;如果没有任何输出,说明尚未关联任何远程仓库。
2. 关联远程仓库
使用 git remote add 命令关联,语法:
git remote add <远程仓库别名> <远程仓库URL>
 
这里的远程仓库URL可以是GitHub、GitLab、Gitee等平台上创建的仓库地址。
示例:
 假设远程仓库地址是 https://gitee.com/abc/xyz.git,通常我们用 origin 作为默认别名:
git remote add origin https://gitee.com/abc/xyz.git
 
3. 验证关联是否成功
再次执行 git remote -v,如果看到类似以下输出,说明关联成功:
origin  https://gitee.com/abc/xyz.git (fetch)
origin  https://gitee.com/abc/xyz.git (push)
 
二、设置上游分支
1. git pull
关联远程分支后,如果直接选择git push推送,会报下面这个错误:
fatal: The current branch master has no upstream branch.
 To push the current branch and set the remote as upstream, use
git push --set-upstream origin master
 
To have this happen automatically for branches without a tracking
 upstream, see ‘push.autoSetupRemote’ in ‘git help config’.
这个错误提示表明本地的master分支没有关联到远程仓库的对应分支。Git需要知道将本地分支推送到远程的哪个分支,因此你需要显式设置上游分支。
错误原因
当你执行git push时,如果本地分支没有设置对应的远程跟踪分支,Git就会抛出这个错误。这通常发生在以下情况:
- 你创建了一个新的本地分支并首次推送。
 - 你重命名了本地分支(如之前的
git branch -M main操作)。 - 远程分支被删除后重新创建。
 
解决方案
执行Git提示的命令,设置上游分支并推送:
git push --set-upstream origin main
 
这个命令等价于:
git push -u origin main
 
其中:
-u(或--set-upstream)参数将本地的main分支与远程仓库的main分支关联。- 之后你就可以直接使用
git push或git pull,无需再指定远程分支。 
自动设置上游分支(可选)
如果你希望Git自动为新分支设置上游,可以配置push.autoSetupRemote:
git config --global push.autoSetupRemote true
 
这样,每次使用git push推送新分支时,Git会自动创建并关联远程分支。
2. git push -u origin master
上面提到,本地仓库分支没有关联远程仓库分支时,使用git push是会报错的,应该使用 
 git push -u origin main
 但是再本文章中这种 本地仓库与远程仓库存在独立历史情况下会报
To https://gitee.com/abc/xyz.git
! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://gitee.com/abc/xyz.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. If you want to integrate the remote changes,
hint: use 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
 
或者
To https://gitee.com/abc/xyz.git! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://gitee.com/abc/xyz.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
 
这个错误提示表明你的本地分支落后于远程仓库的对应分支,导致推送失败。这通常是因为远程仓库有你本地没有的更新。
解决方法:拉取远程仓库的更新并合并到本地分支:
三、拉取远程仓库
1. git pull
执行git pull会报下面的错误:
There is no tracking information for the current branch.
 Please specify which branch you want to merge with.
 See git-pull(1) for details.
git pull <remote> <branch>
 
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> master
 
这个错误提示表明当前分支没有设置与远程分支的跟踪关系,因此 Git 不知道应该从哪个远程分支拉取更新。
解决方法很简单,你需要先为本地分支设置远程跟踪分支,然后再进行拉取操作:
- 首先设置本地 
master分支跟踪远程origin/master分支: 
git branch --set-upstream-to=origin/master master
 
- 然后就可以正常拉取远程更新了:
 
git pull
 
之后你再执行 git push 时,Git 就会知道要推送到哪个远程分支,不需要每次都指定 origin master 了。
如果你想直接拉取而不先设置跟踪关系,也可以在拉取时明确指定远程和分支:
git pull origin master
 
2. git pull origin master
执行git pull origin master会报下面的错误:
From https://gitee.com/abc/xyz
- branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories 
这个错误发生在 Git 拒绝合并两个被认为是"不相关"的历史记录的分支。这通常发生在以下情况:
- 本地仓库是全新创建的,而远程仓库已有提交历史
 - 两个仓库完全独立创建,没有共同的提交历史
 
解决方法是在拉取时添加 --allow-unrelated-histories 参数,允许 Git 合并不相关的历史:
git pull origin master --allow-unrel++ated-histories
 
执行这个命令后,Git 会强制合并这两个分支的历史。如果出现合并冲突,你需要:
- 编辑冲突文件,解决冲突标记(
<<<<<<<、=======、>>>>>>>) - 标记为已解决:
git add <冲突文件> - 完成合并:
git commit -m "合并不相关历史并解决冲突" 
之后就可以正常推送了:
git push origin master
 
这个参数只需要在第一次合并不相关历史时使用,后续操作不需要再添加。
总结
本文所述的这种本地仓库与远程仓库存在独立历史情况下,采用下面处理方式:
- 1.
git remote add origin - 2.
git pull origin master --allow-unrelated-histories - 3.
git push origin master 
1关联本地仓库与远程仓库
 2强制合并两个独立分支,也是最关键的一步
 3推送本地仓库到远程仓库
总之,所有问题在于,当两个仓库有独立历史时,
 直接推送本地仓库本身就不合理,自然会报错本地仓库落后于远程仓库
 此时选择拉取远程仓库又会报错两个仓库不相关
 所以重点是git pull origin master --allow-unrelated-histories强制让两个仓库一致,问题就解决了
另外说一嘴
使用git push -u origin master之后,后续就可以直接git pull、git push了,效果和
 git branch --set-upstream-to=origin/master master一样,不然以后都要一直用
 git push origin master了
