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:rebase
和 merge
可能会导致非常不同的历史记录,许多开发工作流程希望开发人员在功能分支上使用 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 另一个分支到我的工作分支的主要内容,如果未能解决你的问题,请参考以下文章