Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >git pull --rebase上游& git推送原点拒绝非快进?

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

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

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git reset --hard HEAD~5 && git push --force

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
git pull
Merge made by the 'recursive' strategy.

git push

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 09:57:01

当你

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git pull --rebase upstream master

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

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

https://stackoverflow.com/questions/9661059

复制
相关文章
简单对比git pull和git pull --rebase的使用
使用下面的关系区别这两个操作: git pull = git fetch + git merge git pull --rebase = git fetch + git rebase 现在来看看git
洗尽了浮华
2018/01/22
1.6K0
简单对比git pull和git pull --rebase的使用
聊下git pull --rebase
《聊下git pull --rebase》是一种场景,在这种场景下,大家都基于develop拉出分支进行并行开发,分支可能是多到数十个。然后彼此在进行自己的逻辑编写,时间可能需要几天或者几周。在这期间你可能需要时不时的需要pull下远程develop分支上的同事的提交。这是个好的习惯,这样下去就可以避免你在一个无用的代码上进行长期的开发,回头来看这些代码不是新的代码。甚至是会面临很多冲突需要解决,而这个时候你可能还需要对冲突的部分代码进行测试回归,这就很麻烦了。那么我们来看一下你在pull时候需要习惯性的加上—rebase参数,这样可以避免很多问题。--rebase的本意是想让事情的发展看起来很连续和优美,而不是多出很多无用的merge commit 。
王清培
2018/01/08
6280
聊下git pull --rebase
git rebase
rebase 这个命令正式工作中基本上没有用过,只是学习时曾经写过 Demo,但具体指令的含义不是太理解,总觉得没有 merge 来得有掌控感,而且过去使用代码出过问题,所以一直知道但没去用它。
三流之路
2018/09/11
7680
git rebase
git rebase
但是与此同时,有些人也在"origin"分支上做了一些修改并且做了提交了. 这就意味着"origin"和"mywork"这两个分支各自"前进"了,它们之间"分叉"了
JavaEdge
2018/08/10
3820
git rebase
Git - Git Merge VS Git Rebase
Git merge和Git rebase是两种不同的版本控制工作流程,它们用于将一个分支的更改合并到另一个分支。它们有不同的工作原理和应用场景,下面是它们的主要区别:
小小工匠
2023/09/14
3090
Git - Git Merge VS Git Rebase
Git -- Rebase
git rebase: 这个命令可以把一个分支上commit的变化放到另一个分支上重新上演一遍. 简单的Rebase例子. 首先准备好一个git项目. 做一个feature分支, 然后做几个commi
solenovex
2018/03/29
7720
Git -- Rebase
git merge vs git rebase
https://www.atlassian.com/git/tutorials/merging-vs-rebasing/conceptual-overview
jiewuyou
2022/09/29
4060
git merge 和 git rebase
为什么会说这两个呢,是因为我觉得这两个命令有一些共同点,而且git merge 常用,git rebase 不常用,放在一起说的时候,可以更方便了解记忆git rebase。
艳龙
2021/12/16
4750
git merge 和 git rebase
Git之Rebase
在上一节我们看到了,多人在同一个分支上协作时,很容易出现冲突。即使没有冲突,后push的童鞋不得不先pull,在本地合并,然后才能push成功。 每次合并再push后,分支变成了这样: $ git log --graph --pretty=oneline --abbrev-commit * d1be385 (HEAD -> master, origin/master) init hello * e5e69f1 Merge branch 'dev' |\ | * 57c53ab (or
兮动人
2021/06/11
4400
git rebase使用
作用: 是重置提效记录。 本质是,当合并其它分支的提交记录后,重整提交记录。 不论是自己开发,还是参加开源项目,有很多时间,需要重整提交记录。美化一下,这时候就很有用了。
潇洒
2023/10/20
2860
git rebase使用
git pull 代码的时候默认使用 rebase 而不是 merge
git pull 实际会有两个操作,一个是 git fetch,另外一个是 git merge。一般 merge 的情况下会产生一个新的提交名字为 Merge branch ****,如下图所示:
我与梦想有个约会
2023/10/21
9370
git pull 代码的时候默认使用 rebase 而不是 merge
git pull 代码的时候默认使用 rebase 而不是 merge
git pull 实际会有两个操作,一个是 git fetch,另外一个是 git merge。一般 merge 的情况下会产生一个新的提交名字为 Merge branch ****,如下图所示:
我与梦想有个约会
2023/10/21
9810
git pull 代码的时候默认使用 rebase 而不是 merge
git的pull和fetch区别_git pull和git clone
大家好,又见面了,我是你们的朋友全栈君。 git fetch和git pull都可以将远端仓库更新至本地那么他们之间有何区别?想要弄清楚这个问题有有几个概念不得不提。 FETCH_HEAD: 是一个版
全栈程序员站长
2022/09/23
1K0
git pull --rebase 做了什么? 以及 Cannot rebase: You have unstaged changes 解决办法
本文介绍了 git pull --rebase 命令的作用以及使用该命令时可能遇到的问题,并提供了解决方法。
张拭心 shixinzhang
2018/01/05
4.5K0
git pull --rebase 做了什么? 以及 Cannot rebase: You have unstaged changes 解决办法
git rebase merge 区别
老是问rebase merge 的区别,先问,他们为什么要有区别? 我的理解:为了看提交日志需要【主要看顺序,不同的提交排序规则】 A 在orignal 分支 am 8:00提交一次修改 【修改8】 B 在master 分支  am 9:00提交一次修改 【修改9】 A 在orignal 分支 am 10:00提交一次修改 【修改10】 B 在master 分支  am 11:00提交一次修改 【修改11】 现在,进入master 分支目录 执行git merge orignal 然后看下日志,应该是: 1
技术蓝海
2018/04/26
6660
git rebase 命令详解
rebase 在 git 中是一个非常有魅力的命令,使用得当会极大提高自己的工作效率;如果乱用,会给团队其他人带来麻烦
很酷的站长
2022/12/05
4.5K0
git rebase 命令详解
区别 git clone 与 git pull
是在本地没有版本库的时候,从远程服务器克隆整个版本库到本地,是一个本地从无到有的过程。
全栈程序员站长
2022/09/16
5940
Git rebase使用详解
git rebase能够将分叉的分支重新合并,之前写过一篇文章介绍它的原理,下面主要介绍它的两个使用场景:
全栈程序员站长
2022/07/19
6230
Git rebase使用详解
git rebase的使用
git rebase简单的作用就是合并,同git merge很类似,但是原理又跟git merge不同,下面我们来了解一下git rebase的作用: 1、合并多次commit 在开发过程中,我们要完成一个需求,首先我们会从远程仓库拉取一个相对干净的代码,比如测试环境分支develop,然后基于develop分支再创建一个自己本地的分支,代码如下: 创建自己的分支后,就在当前分支中完成自己的需求,完成后需要并自己测试无误后将自己的代码合并到develop分支再push到远程分支,代码如下: 当然上面讲述的事
企鹅号小编
2018/01/10
7710
git rebase 入门实践
上述步骤3可有更佳实践,在合入 master 时进行压缩可以让 master 分支更 ”清爽“,即: 步骤3 开发A,开发完毕,准备发布
lukachen
2023/10/22
2850
git rebase 入门实践

相似问题

git推送拒绝非快进

13

git pull表示最新,但git push拒绝非快进

30

git rebase upstream/master vs git pull --rebase上游master

10

Git拒绝非快进

24

Git Pull vs Git Rebase

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文