git rebase 另一个分支到我的工作分支

Posted

技术标签:

【中文标题】git rebase 另一个分支到我的工作分支【英文标题】:git rebase of another branch to my working branch 【发布时间】:2018-06-22 01:05:59 【问题描述】:

我想知道如何从我曾经分支的分支中获取提交,将所有提交应用到我的工作分支并再次应用我的工作分支提交。

例如: develop 是我从 --> working_branch 分支出来的分支。 我正在工作的分支上工作,过了一段时间我想将所有提交从开发拉到我的工作分支,并希望之后将我的提交放在开发完成的所有提交之上。

我希望这是可以理解的。 我知道可以通过 rebase 来开发,但是问题是如何创建正确的合并请求。 重新定位到开发后,我无法推送开发分支并创建合并请求。

那么实现这一点的命令是什么。

如果完全没有意义,我很抱歉。

【问题讨论】:

你为什么不做一个合并?这将是想要将两个分支合并在一起的标准反应。 这就是我想做的事情,但我的同事总是告诉我做rebase to develop。所以我不明白。可能是因为当时有太多的冲突,因为我的分支太老了,而开发分支已经进化了太多。所以最好先应用开发中的提交,然后应用我的工作提交。我真的不确定什么是正确的方法。 我认为你需要阅读这个When do you use git rebase instead of git merge? 合并和变基是非常相似的事情 How to rebase local branch with remote master的可能重复 @Liam: rebasemerge 可能会导致非常不同的历史记录,许多开发工作流程希望开发人员在功能分支上使用 rebase,而在实际提交时将使用 merge主分支的新功能。 【参考方案1】:

您最初询问的答案是如何移动提交。字面的答案是你不能移动提交,但你可以重新设置它们(创建新的提交,在不同的提交上应用相同的更改,并将分支移动到新的提交),你已经知道如何做。所以这不是你的问题。

您无法推送的原因是这样做会从分支中删除历史记录。变基后你有

                       A' -- B' -- C' <--(feature)
                      /
x -- x -- x -- x -- x <--(develop)
      \
       A -- B -- C <--(origin/feature)

通常,当您将更新推送到分支时,相应的远程分支可以从您的分支“访问”。在这种情况下,情况并非如此,因为您移动了分支(以“将新提交添加到分支”)。

默认情况下 git 会拒绝这个推送,因为如果其他人已经获取了feature,那么以这种方式移动它会给他们带来问题。您可以与其他用户协调以解决这些问题,因此您可以覆盖 git 拒绝推送的默认决定。请注意,如果您在未与其他开发人员协调的情况下执行此操作,则会给每个人带来问题(包括您的工作可能最终被撤消)。

有关如何协调清理的信息,请参阅“从上游 rebase 恢复”下的 git rebase 文档。你可以在这里找到它:https://git-scm.com/docs/git-rebase

如果您处理了所有这些(或者,在简单的情况下,如果没有其他人拥有该分支的副本),那么您可以“强制”推送

git push -f

需要注意的是,根据 git 的托管方式,服务器可能会或可能不会配置为允许您强制推送到该分支。如果不是,那么这是一个团队级别的规则,即“你不能重新设置你已经推送的分支”。在这种情况下,您必须决定是否值得将 develop 合并到 feature

【讨论】:

以上是关于git rebase 另一个分支到我的工作分支的主要内容,如果未能解决你的问题,请参考以下文章

Git rebase 因在当前分支中发生冲突而无法正常工作

git rebase 不使用分支

git pull 在不同的分支上

从 git 分支中删除文件但将其保留在另一个?

Git Rebase 从带有 Squashed 合并的分支

Git rebase 一次又一次地回到同一个地方