git 提交时报错 error: failed to push some refs to ‘https://github.com/xxx/demo.git 解决方法

1. 前言

本文解决由于git 处于游离状态下不能提交代码的问题。文章由导致原因,解决方法和思考三个内容组成。

2. 问题复现

我们从远程仓库 clone 代码下来,进行需求开发,可能进行了以下步骤。
(1)git clone https://github.com/xxx/demo.git
这时候将远程仓库的默认分支克隆下来了,本文中的默认分支时master分支,但是我需要基于feature分支或者其他分支进行开发。所以有接下来的动作。
(2)git checkout origin/newbranch1
将远程的 newbranch1 分支 checkout。问题就出现在这里。不管是记错命令还是因为不熟git都可能会出现这样的失误。
这个命令将导致git 的HEAD指向远程分支,是处于一个游离状态,如果只是看代码这个动作是OK的,但是要基于此进行开发那是有些问题的。通过git branch命令来看git的分支状态,可以看到HEAD detached at origin/newbranch1,如下图所示。
在这里插入图片描述
(3)然后你忙活了一天写了很多东西,熟练的git add、git commit、git pull,到git push origin xxx的时候出问题了:

error: src refspec newbranch1 does not match any.
error: failed to push some refs to 'https://github.com/xxx/express-sequelize-mysql-demo.git'

怎么解决呢?

3. 解决方法

注意,一定要将修改的代码提交到本地仓库区,否则接下来的动作可能导致你的代码没了!
注意,一定要将修改的代码提交到本地仓库区,否则接下来的动作可能导致你的代码没了!
注意,一定要将修改的代码提交到本地仓库区,否则接下来的动作可能导致你的代码没了!
将修改的代码提交到本地仓库区,就是要执行git add . git commit 动作。

接下来是解决问题的步骤了:
(1)新建本地分支git branch temp,新分支会记录你修改的代码,不能直接checkout到其他分支,不然你的代码要没有了。
(2)我们要提交代码到newbranch1分支(你想要提交代码的目标分支名称),那么执行git branch newbranch1
执行这一步,git会在本地仓库建立一个newbranch1的分支,并关联到远程仓库的newbranch1分支。
(3)切换到newbranch1分支,执行 git checkout newbranch1
(4)将temp临时分支与newbranch1分支合并,git merge temp
(5)看看代码,是不是ok了,你会发现是的,没错了。那拉取一下git pull origin newbranch1,再git push origin newbranch1就提交上去了。
(6)删除本地临时分支,它没有价值了,git branch -d temp
到这里就全部解了,但还是要思考一下如何避免问题的出现。

4. 一些思考

我们如果要基于某个分支进行开发,不要执行2 -(2)中的git checkout origin/newbranch1 命令,这将导致git指向游离状态,在一些多人协作的复杂场景下是需要用到了,但如果只是较为简单的小项目上我们可以这么做:
(1)git clone下来之后,通过git checkout newbranch1就能直接检出并切换到远程仓库的newbranch1分支了。这个方法的话,没有newbranch1会自动创建并切换到该分支。
(2)当然,还有个方法。就是通过git branch newbranch1创建分支,然后再切换到分支git checkout newbranch1

还是要拿个仓库动手试试才能明白,光看这个你就可能晕掉了,动手吧

5. 给作者加加油吧


对你有帮助的话,一杯咖啡让作者更有动力~ (click)


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值