首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >git pull --rebase上游& git推送原点拒绝非快进?

git pull --rebase上游& git推送原点拒绝非快进?
EN

Stack Overflow用户
提问于 2012-03-12 10:30:56
回答 1查看 8.9K关注 0票数 9

我在github上为一个公司项目实现了经典的OSS维护者/贡献者git工作流,然而一个边缘案例产生了一些奇怪的结果,我不确定如何解决。

假设有一个典型的项目,我派生并添加了上游远程,以使其保持最新。

代码语言:javascript
运行
复制
git clone git@github.com:kozhevnikov/<project>.git
git remote add upstream git@github.com:<company>/<project>.git

出于本例的目的,这个fork落后了几个提交。

代码语言:javascript
运行
复制
git reset --hard HEAD~5 && git push --force

我在这个fork上工作,并推送一些提交,在推送我的最后一个提交和创建一个拉请求之前,我更新我的fork的克隆,以确保没有冲突。

代码语言:javascript
运行
复制
touch foo && git add foo && git commit -m foo && git push
touch bar && git add bar && git commit -m bar

git pull --rebase upstream master

From github.com:<company>/<project>
 * branch            master     -> FETCH_HEAD
First, rewinding head to replay your work on top of it...
Applying: foo
Applying: bar

现在,当我试图推到我的fork时,我被拒绝了。

代码语言:javascript
运行
复制
git push

To git@github.com:kozhevnikov/<project>.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:kozhevnikov/<project>.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

我接下来该怎么办?我想要的是pull请求包含foo和bar提交,但是...

当I pull时,拉取请求包含重复的foo提交以及额外的合并。

代码语言:javascript
运行
复制
git pull
Merge made by the 'recursive' strategy.

git push

在github上,拉取请求如下所示。

代码语言:javascript
运行
复制
Showing 4 unique commits by 1 author.
12345  
kozhevnikov  foo    4 minutes ago
67890  
kozhevnikov  foo    4 minutes ago
abcde  
kozhevnikov  bar    2 minutes ago
fghij  
kozhevnikov  Merge branch 'master' of github.com:kozhevnikov/<project>    just now

当我用git pull --rebase代替pull时,最好的情况是将其他人的提交包含到我的pull请求中(那些来自reset的请求),最坏的情况是它会给我带来合并冲突。

当我在没有任何pull--rebase的情况下使用git push --force时,它可以完美地工作,然而,我非常不安地告诉每个人使用强制或使其成为标准工作流程的一部分,因为我可以想象很少有人或一个小的子团队在一个单独的分支上协作,并通过强制推送来踩到对方的脚趾。

有什么想法吗?我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-12 17:57:01

当你

代码语言:javascript
运行
复制
git pull --rebase upstream master

您正在重写您自己的历史,因为您是在更新的上游存储库上重新建立您的主分支。当你把你的rebased repo推到你的fork时,git抱怨。你需要用--force来推动

代码语言:javascript
运行
复制
git push --force origin master
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9661059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档