【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题

这篇具有很好参考价值的文章主要介绍了【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

我在github上新创建的远程仓库默认分支名为main,而本地仓库默认分支名为master,当我push代码的时候碰到了若干坑…


一、踩坑一:奇怪的上游分支?

先在github上快速创建个仓库,有个readme文件,远程仓库分支是main分支
【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题
然后本地创建两个文件夹,假装是两台主机,我们先在张三文件夹里写点东西
【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题
在张三的文件夹里创建文本并提交到了本地仓库,且现在与远程仓库建立了连接,当我们现在想要把本地仓库push到远程,直接git push?
【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题

发现报错,fatal:the current branch master has no upstream branch,表示当前本地分支master没有上游分支,要想push当前分支并设置远程分支为上游分支,用以下指令。
【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题

我们先试试此指令给本地master设置上游分支git push --set-upstream origin master
【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题
登录之后,push成功,但是是给远程创建了新的master分支,将origin/master设置为本地master的上游分支,这显然不是我们想要的结果
【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题
因为我们将上游分支设为了origin master,所以会在远程新创建一个master分支。那想要把本地master推到远程main,应该如何操作?

二、踩坑二:合并报错unrelated history

我们再来到李四的文件夹进行尝试,还是先快速搭建一下本地git仓库
【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题
我们尝试拉取远程main分支里的readme文档,发现报错fatal:refusing to merge unrelated histories。表示拒绝合并两个毫不相关的分支,我们都知道git pull = git fetch + git merge,所以把git pull进行拆分,发现可以正常fetch到远程仓库的代码,但是拒绝合并,这又是为什么呢?
【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题
在stack overflow查询得知,这个问题是在git 2.9版本后产生。因为在这之前git merge允许合并两个毫不相干的分支(两个分支都有过提交历史,但没有共同父节点则被认为是不相关),这可能会让一些小白犯错。所以在git 2.9版本后不允许这一默认行为。如果非要合并,可以加上--allow-unrelated-histories强制合并
【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题
强制merge成功,可以看到readme文档成功拉下来。此时要想push本地master代码到远程main,又该如何操作呢?
【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题

三、胜利的曙光:分支名不一致push终极解决办法

直接push依然错误,提示需要设置上游分支。通过git branch ---set-upstream-to=origin/main指令,将本地master分支的上游分支设置为远程main分之后,再次push,依然报错。提示需要更详细指定的push指令:git push origin HEAD:main/git push origin master:main
【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题
可以看到,用更详细的指令终于push成功了,但每次都需要这样写太繁琐了,而且已经将本地master的上游分支设置为了origin/main,有没有更好的解决办法呢?
【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题

通过查阅git文档,发现这一机制是因为push.default这一配置的默认行为
输入git push,如果当前配置为:

  • current push当前分支到远程相同名字的分支,如果远程没有这个名字的分支,则会在远程创建相同名字的新分支
  • upstream push到当前分支的上游分支
  • simple push当前分支到远程相同名字的分支,u如果远程没有这个名字的分支,会报错而不会创建新远程分支(在git 2.9版本后,simple是默认行为)
    【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题

所以我们得知,如果想让git push自动push到匹配的上游分支,则需要修改git config,通过git config push.default upstream修改这一默认行为
【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题

我们再对李四的文件进行一些修改,并提交到本地仓库,再次尝试push到远程
【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题
成功!

四、总结

可以看到,分支名不一致时,需要先给当前分支设置远程分支为上游分支。push时需要严格按照git push <remote> <local branch> : <remote branch>格式,否则会报错
但是每次都写这么长串很麻烦,可以通过git config push.default upstream指令,修改push的默认行为,自动push到已经配对的上游分支,以后就可以直接git push提交代码。
但最好还是一开始就保持分支名一致hhh文章来源地址https://www.toymoban.com/news/detail-452527.html

到了这里,关于【git踩坑记录】git push时本地分支名与远程仓库分支名不一致引发的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • git 如何创建新的远程分支,并将本地代码 push 到新的分支

    1、可以通过git branch -r 命令查看远端库的分支情况 2、从已有的分支创建新的分支(如从master分支),创建一个 duanjiwang 分支 但此时并没有在远程仓库上创建分支 如图所示 还是只有一个 master 分支 3、建立本地到远端仓库的链接 --这样代码才能提交上去 使用命令行 4、git 强制提交

    2024年02月12日
    浏览(60)
  • git 同步远程仓库远程分支至本地

    1、克隆远程仓库 2、查看分支 3、将本地分支与远程保持同步 4、新建本地分支,名称与远程仓库分支名称一致,并同步远程分支 5、同步所有远程分支 6、将本地所有分支与远程保持同步 7、最后拉取所有分支代码

    2024年02月15日
    浏览(50)
  • git 撤销已经push的代码(本地代码和远程仓库)

    注: HEAD~1 的意思是最近一个版本,也可以写成 HEAD^ 如果需要撤回最近两次提交的commit,可以使用 HEAD~2 ,依次类推。 此时通过 git log 可查看本地代码已经回退到 目标版本。 如果你是项目的owner,在本地 master 分支使用git rebase 或者 git reset撤销了一些commit之后,想要强制推送

    2024年02月11日
    浏览(67)
  • 【Git】本地仓库管理远程库(GitHub)——clone(下载)、commit(添加到本地仓库)、push(提交到远程仓库)、pull(拉取)操作

    目录 使用远程仓库的目的 将本地仓库同步到git远程仓库 1.克隆远程仓库(clone) 2.新建一个文件 3.将工作区的文件添加到暂存区 4.将暂存区的文件添加到本地仓库(commit) 5.提交(同步)到远程仓库(push) 6.远程库拉取到本地库(pull) 7.团队协作开发和跨团队协作开发(开源项目) 作用:备

    2024年01月21日
    浏览(73)
  • git 拉取远程分支到本地仓库

    查看分支 查看本地仓库的本地分支 查看本地仓库的远程分支 拉取远程分支到本地(未创建本地分支) 拉取远程分支 创建本地分支,将远程分支的代码拉取到本地分支 拉取远程分支到本地(已创建本地分支) 拉取远程分支 切换本地分支 将远程分支的代码拉取到本地分支 如果本

    2024年01月20日
    浏览(53)
  • git将远程仓库代码拉下覆盖本地仓库 && git remote&& git push -u 用法

    git将远程仓库代码拉下覆盖本地仓库 记录,在最近代码学习过程中,自己手动改了一下代码,但是忘记修改了哪些,现在想恢复到和远程仓库代码一致。 使用如下三条命令搞定: 1.git fetch --all //获取远程仓库所有代码到本地 2.git reset --hard origin/master //强制将本地代码和远程

    2024年04月15日
    浏览(42)
  • git本地新建分支,并同步到远程仓库

    1、新建本地分支 2、在远程仓库中新建分支,名称保持一致 3、查看本地分支 4、转到本地分支 5、删除本地分支 6、同步本地分支至远程仓库 7、如果有错误,提示版本不同步,如回退版本后修改了内容并需要同步,这时候可以使用强制推送

    2024年02月11日
    浏览(46)
  • git命令行推送本地分支到远程仓库

    之前说过Git与IDEA强强联合(HTTPS协议连接)那么如何使用命令行来推送代码呢? 如下图所示为一个基于layui的前端代码: 目录工作区文件: 本地内容就是将这些内容推送到远程仓库 首先使用git命令初始化git本地仓库: git init 创建本地仓库 以出现 .git 命令为参考: 创建git仓

    2024年02月02日
    浏览(58)
  • 在Git中将本地分支推送到远程仓库

    这里很明显 我git云端只有一个master分支 然后 我在本地创建了一个develop分支 然后 现在我想将他放在云端 首先 我们要执行 将本地切换到 develop 分支上 因为我这里已经选择的就是了 就不需要了 然后我们执行 这样 刷新云端的页面 develop分支就上去了

    2024年02月09日
    浏览(54)
  • 无需多人协作开发时 只在本地使用git,无需git push到远程仓库

    1.以下部分先介绍的是git在本地的使用。当不涉及到多人协作,只是想要一个工具记录每一次的提交和修改,能轻松还原到某个版本,git已经可以满足这些功能了。 2.只有当涉及到多人协作时,gitlab和github等web仓库才更好的派上用场。 git add 提交至暂存区 git commit 提交至版本

    2024年02月15日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包