我放弃!每当我试图推动时,我都会变得愚蠢:
! [rejected] master -> master (non-fast forward) error: failed to push some refs to 'git@github.com:companyX/projectX.git'
我们的团队有一个新的git设置.我现在分叉我们的主存储库(在github上)来创建我自己的副本,而不是创建私有分支.
在某些时候我做的是:
$ git fetch upstream master:upstreammaster
所以这是我目前的设置::
$ git branch master * upstreammaster $ git remote -v origin git@github.com:userX/projectX.git upstream git@github.com:companyX/projectX.git
userX是我的私人存储库.
所以我去对我的upstreammaster分支进行一些更改,并从"上游主服务器"进行PULL.一切融合和东西:
$ git pull upstream master remote: Counting objects: 95, done. remote: Compressing objects: 100% (60/60), done. remote: Total 60 (delta 54), reused 0 (delta 0) Unpacking objects: 100% (60/60), done. From git@github.com:companyX/projectX * branch master -> FETCH_HEAD Merge made by recursive. stuff | 165 ++++++++++++-------- stuff | 35 ++-- stuff | 107 ++++++++++--- stuff | 105 ++++++++++--- stuff | 24 ++-- stuff | 9 +- stuff | 53 +++---- stuff | 44 +++--- stuff | 52 +++---- stuff | 32 +---- stuff | 4 +- stuff | 138 ++++++++--------- stuff | 58 ++++---- stuff | 115 ++++++++------ stuff | 5 +- stuff | 39 ++--- stuff | 28 ++-- 17 files changed, 560 insertions(+), 453 deletions(-)
但是当我尝试做的时候:
$ git push upstream master To git@github.com:companyX/projectX.git ! [rejected] master -> master (non-fast forward) error: failed to push some refs to 'git@github.com:companyX/projectX.git'
任何帮助都会非常感激!如果您需要澄清请询问,我会回复!
执行推送时,请尝试为上游主服务器指定refspec:
git push upstream upstreammaster:master
Jarret Hardie是对的.或者,首先将您的更改合并回master,然后尝试推送.默认情况下,git push
推送名称在遥控器上匹配的所有分支 - 而不是其他分支.所以这些是你的两个选择 - 要么像Jarret那样明确地指定它,要么合并回公共分支然后推送.
在Git邮件列表上已经讨论过这个问题,很明显,这种行为不会很快改变 - 许多开发人员在他们的工作流程中依赖这种行为.
编辑/澄清
假设您的upstreammaster
分支已准备就绪,那么您可以这样做:
从上游引入任何更改.
$ git pull upstream master
切换到我的本地主分支
$ git checkout master
合并来自的变化 upstreammaster
$ git merge upstreammaster
推动我的更改
$ git push upstream
在推送之前您可能想要做的另一件事是rebase
对上游/主控的更改,以便您的提交全部在一起.您可以将其作为上述(git rebase upstream/master
)的#1和#2之间的单独步骤,或者您可以将其作为pull(git pull --rebase upstream master
)的一部分来执行
首次使用
git pull https://github.com/username/repository master
然后试试
git push -u origin master
首先,尝试从您尝试推送的相同refspec中提取.
如果这不起作用,您可以强制git push
使用git push -f
,但要小心:此方法可能导致在远程存储库上删除引用.