git提交代码到远程分支失败(you are not allowed to upload merges)

                                    git提交代码到远程分支失败

一、问题描述:

在将本地的代码时提示提交代码到远程分支失败。

隐藏的是项目远程仓库的地址

二、问题原因:

我们多次(超过一次)commit代码,并且git pull和git pull --rebase混用更新代码的时候,可能会出现这个错误。在开发的时候可能会有些组内的规范,规定需要以什么方式拉取或者合并代码。但是如果混用两种方式拉代码的话,可能会有这个问题。

1:首先拉取远端的代码,develop分支的代码。

2:写自己的逻辑,写完代码之后自测通过准备提交代码。

3:git add ,git commit , git push的时候提示先要pull(拉取远端最新的代码)。于是git pull --rebase。

4:由于项目紧张继续写自己的业务,然后add commit,git pull。这时候就不能正常git push了,因为混用了git pull 和 git pull --rebase 两种方式拉代码。

三  注意事项

3.1  拉取分支代码的变动的两种方式

merge:这种方式会生成一个你本地和远程合并的提交

rebase:这种方式会产生变基操作(这种方式会改变你本地的提交历史,你本地的提交会在远端的基础上再进行提交)。

注意:拉取远端代码的时候要注意你自己需要明确你应该用什么方式去拉取远端代码,如果你的commit次数过的话,rebase会基于你的提交次数进行代码合并。这里需要注意如果你的多次提交都改了一个文件,并且这个文件合并的时候还有冲突的话,你需要解决很多次冲突。而merge方式会基于你最后一次提交的代码进行合并,只需要解一次冲突。

3.2  合并分支代码的两种方式

合并分支代码也有rebase和merge的方式。如果你确定使用rebase方式合并其他分支代码的话,注意rebase是变基操作的,rebase方式合并分支代码会找到两个分支的公共节点(比如从master分支的某次提交切出去的)。如果是branchA rebase origin/branchB。这时候会把从master的节点接上B所有节点的信息,然后在接上所有A节点的信息。画一个图解释一下。

1  分支B的3次测试提交

 2  分支A的2次测试提交

 3  分支A rebase之后的分支变化

这里可以看到rebase过后是找到他们公共的节点信息,然后两个分支依次提交,而且远端的提交和本地提交已经分叉了,这时候想要push肯定是不行的。 

4  这时候只能拉远端代码,注意这里一定要用git pull,因为你现在本地的提交是基于分支TestB变基的,如果用git pull --rebase的话,就又以分支testA变基了,之前rebase testB分支的东西就会丢失。

 这样就把分支testB的提交记录提交到testA分支的提交记录前面了。

 建议在合并其他分支代码的时候采用merge方式,都在一个分支开发的时候提交前拉代码用rebase方式,否则会产生一个没有用的把远程分支的代码合并到本地分支的提交。

四:解决措施

上面不能push的问题可以参考下面的解决方式。

1:git log查看提交记录的版本信息。

找到带有标注样式的版本号,下面的提交是你需要回退到的版本(即你没有提交代码的版本)

2:git reset --soft a0ad996d7b797745c9bdc93e2de6d1bc30ddce8b

这里注意一定是soft,否则你的代码就都没有了!!!

这里注意一定是soft,否则你的代码就都没有了!!!

这里注意一定是soft,否则你的代码就都没有了!!!

3:git pull --rebase拉取远程分支代码

4:拉取代码提示错误:

这时候需要保证你本地分支的干净(没有你添加的代码):

git stash(保存本地的任务进度,保存暂存区(我们add的更改内容)和工作区(我们通过IDE上更改的文件目录))

5:git pull --rebase拉取远程分支代码

6:git stash pop 恢复本地任务。

7:git add -> git commit -m "" -> git push origin develop

Congratulations!

  • 33
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值