Git:使用 rebase 应用功能分支(不合并)

问题描述 投票:0回答:3

有一个小主题分支(在贡献者的远程存储库上),我想将其应用到我的 master 之上。我认为执行此操作的规范方法是:

git merge contributor/topic-branch

但我希望逐一应用提交,而不是生成合并提交。

天真地运行

git rebase contributor/topic-branch
显然是行不通的,因为它将我的 master onto 应用于主题分支,就好像主题分支是我的上游一样。所以我尝试了这个:

git rebase master contributor/topic-branch

这就是我想要的,除了现在我有一个分离的 HEAD,并且我需要修复 master 分支以指向 HEAD(使用

branch -f
)。我当然可以编写一个 Bash 函数来自动执行此操作,但是有没有一种“正确”的方法可以在不使用
merge
的情况下拉入主题分支?

git git-branch branching-and-merging git-rebase
3个回答
14
投票

怎么样:

git checkout topic-branch
git rebase master
git checkout master
git merge topic-branch

这解决了当地分支机构的问题。解决跟踪分支留作练习。

编辑:我想我应该解释一下这里发生了什么。首先你切换到主题分支;然后你对主题分支进行变基,使其基于 master。 (然后,当然,你测试一切是否仍然有效。你do有自动测试,对吧?)现在主题分支领先于master,你可以更改回master并将主题合并到master;不需要合并提交,因为它是快进。


3
投票

我也刚刚发现cherry-pick支持提交范围,所以你可以这样做

git cherry-pick HEAD..contributor/topic-branch

(这将连续应用

topic-branch
中无法从 HEAD 访问的所有提交。)

我从手册页中感觉到,如果主题分支中有合并提交,这将会失败,因此这只适用于具有线性历史的简单情况。

此外,如果您使用本地主题分支执行此操作,

branch -d
将不会检测到
topic-branch
已合并,因此您必须使用
-D
。 (相比之下,Philip 的
rebase
+
merge
方法没有这个问题。)


0
投票

如果您想将提交范围从

commit-start-id
移植到
topic-branch-head
,那么请执行

git checkout contributor/topic-branch
git rebase --onto master <commit-start-id>
© www.soinside.com 2019 - 2024. All rights reserved.