为了账号安全,请及时绑定邮箱和手机立即绑定

为什么git变基之后需要git push -f才能提交上去不报错求解答!

为什么git变基之后需要git push -f才能提交上去不报错求解答!

交互式爱情 2019-11-02 13:23:58
如题,dev,master两个分支,将dev变基到master上,然后dev再去add,commit,push,会报如下错`hint:Updateswererejectedbecausethetipofyourcurrentbranchisbehindhint:itsremotecounterpart.Integratetheremotechanges(e.g.hint:'gitpull...')beforepushingagain.hint:Seethe'Noteaboutfast-forwards'in'gitpush--help'fordetails.`使用gitpush-f则会成功提交,且提交线变成一条
查看完整描述

2 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

因为git只有一个主分支。也就是第一分支(我是这么叫的),然后我们可以在主分支上新建各个分支(我就叫它二级分支),这些二级分支是可以直接push到master分支的。但是呢,如果你在二级分支上新建分支(三级分支),那么git文件的master主分支是不关联这些分支的。也就是说,每一个分支都只关联直系分支。其他分支要想推到自己分支的时候,git直接拒绝了。
所以。我猜测你的dev分支并不只在master上新建的。如果想不用-f强制推送。你可以手动关联这俩个分支。命令:gitremote
附加:
一般我们开发时,我们在master主分支上创建一个自己的分支。每个开发者一个属于自己的分支,然后本地分支关联该分支。只在自己分支改动。bug阶段,每个BUG(或者类别)新建一个分支,该分支与自己分支进行关联。不与主分支master关联。
                            
查看完整回答
反对 回复 2019-11-02
?
GCT1015

TA贡献1827条经验 获得超4个赞

git-push
--force
Usually,thecommandrefusestoupdatearemoterefthatisnotanancestorofthelocalrefusedtooverwriteit.Also,when--force-with-leaseoptionisused,thecommandrefusestoupdatearemoterefwhosecurrentvaluedoesnotmatchwhatisexpected.
Thisflagdisablesthesechecks,andcancausetheremoterepositorytolosecommits;useitwithcare.
当远程分支的提交不是本地分支的提交的祖先的时候,git-push会失败。
变基(git-rebase)会改变提交的之间的祖先关系。从而造成上述情况。
--force会强制提交,会导致远程仓库丢失提交。
比如:
A--B--D(master;origin/master)
`--E(dev;origin/dev)
#在dev分支
gitrebasemaster
A--B--D(master;origin/master)
|`--E'(dev)
`--E(origin/dev)
这时,远程的origin/dev的提交是E,本地在E',E并不是E'的祖先,于是提交失败。
                            
查看完整回答
反对 回复 2019-11-02
  • 2 回答
  • 0 关注
  • 1003 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信