提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、本地仓库关联远程仓库
- 
- [1. 先查看本地是否已有远程关联(可选)](#1. 先查看本地是否已有远程关联(可选))
- [2. 关联远程仓库](#2. 关联远程仓库)
- [3. 验证关联是否成功](#3. 验证关联是否成功)
 
- 二、设置上游分支
- 
- [1. git pull](#1. git pull)
- [2. git push -u origin master](#2. git push -u origin master)
 
- 三、拉取远程仓库
- 
- [1. git pull](#1. git pull)
- [2. git pull origin master](#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. 先查看本地是否已有远程关联(可选)
            
            
              bash
              
              
            
          
          git remote -v如果已有关联,会显示远程仓库的信息;如果没有任何输出,说明尚未关联任何远程仓库。
2. 关联远程仓库
使用 git remote add 命令关联,语法:
            
            
              bash
              
              
            
          
          git remote add <远程仓库别名> <远程仓库URL>这里的远程仓库URL可以是GitHub、GitLab、Gitee等平台上创建的仓库地址。
示例:
假设远程仓库地址是 https://gitee.com/abc/xyz.git,通常我们用 origin 作为默认别名:
            
            
              bash
              
              
            
          
          git remote add origin https://gitee.com/abc/xyz.git3. 验证关联是否成功
再次执行 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 masterTo 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提示的命令,设置上游分支并推送:
            
            
              bash
              
              
            
          
          git push --set-upstream origin main这个命令等价于:
            
            
              bash
              
              
            
          
          git push -u origin main其中:
- -u(或- --set-upstream)参数将本地的- main分支与远程仓库的- main分支关联。
- 之后你就可以直接使用git push或git pull,无需再指定远程分支。
自动设置上游分支(可选)
如果你希望Git自动为新分支设置上游,可以配置push.autoSetupRemote:
            
            
              bash
              
              
            
          
          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分支:
            
            
              bash
              
              
            
          
          git branch --set-upstream-to=origin/master master- 然后就可以正常拉取远程更新了:
            
            
              bash
              
              
            
          
          git pull之后你再执行 git push 时,Git 就会知道要推送到哪个远程分支,不需要每次都指定 origin master 了。
如果你想直接拉取而不先设置跟踪关系,也可以在拉取时明确指定远程和分支:
            
            
              bash
              
              
            
          
          git pull origin master2. 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 合并不相关的历史:
            
            
              bash
              
              
            
          
          git pull origin master --allow-unrel++ated-histories执行这个命令后,Git 会强制合并这两个分支的历史。如果出现合并冲突,你需要:
- 编辑冲突文件,解决冲突标记(<<<<<<<、=======、>>>>>>>)
- 标记为已解决:git add <冲突文件>
- 完成合并:git commit -m "合并不相关历史并解决冲突"
之后就可以正常推送了:
            
            
              bash
              
              
            
          
          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了