git rebase --onto:没做我认为的事情

时间:2018-04-19 17:38:36

标签: git git-rebase

所以,我显然没有正确使用这些命令,但是我很难弄清楚我需要输入哪个命令来实现我想做的事情:

考虑一个sprint分支,我们称之为Team_Sprint_5。在sprint的第1天,我创建了一个新分支来处理我的问题:Issue-1234-branch。到现在为止还挺好。我的分支有Team_Sprint_5分支的基础:

在分支创建中提交历史记录:

5825d  <-- Team_Sprint_5 & feature branch head
3fc55  older commit
a3911  even older commit

所以,我做了一个提交。现在我的分支看起来像这样:

2c442  <-- My commit
5825d  <-- Issue-1234-branch Base
3fc55  
a3911

与此同时,主要的sprint分支已经更新。 我想将我的分支移到当前sprint分支的顶端

(2c442) <-- I want my commit to move here
 b6740  <-- updated Team_Sprint_5 head
 a77fb
 ...    <-- several additional commits in the main branch
[2c442] <-- where my commit ends up instead
 5825d  <-- Where we originally started 

所以,从我目前的分支,我使用git rebase --onto b6740。但是,这似乎粉碎了我在我的分支中提交的初始分支创建之间的所有提交,这不是我想要的。 做我需要的适当命令是什么?

修改 我最终做的是,因为我把我的分支搞砸了我的简单修复能力,就是从当前sprint分支的尖端创建一个新的分支,然后使用cherry-pick命令选择我的提交。我不得不相信这可以通过原始分支上的简单rebase来完成。

1 个答案:

答案 0 :(得分:1)

我想你是从这里开始的,比如

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

然后* b6740 (Team_5_Sprint) * a77fb | * * 2c442 (Issue-1234-branch) |/ * 5825d * 3fc55 * a3911 (不需要git rebase Team_5_Sprint Issue-1234-branch)就会产生

--onto

(对于一些新的提交* vwxyz (Issue-1234-branch) # "Copy" of 2c442 * b6740 (Team_5_Sprint) * a77fb | * 2c442 |/ * 5825d * 3fc55 * a3911 ;您的原始提交vwxyz现在是一个有资格进行垃圾回收的悬空提交,但仍可通过reflog进行检索。)。

2c442创建vwxyz之前,您可能需要解决一些合并冲突。

以下是2c442

时需要--onto的示例
git help rebase

使用 o---o---o---o---o master \ o---o---o---o---o next \ o---o---o topic ,我们会在git rebase --onto master next topic之上移动nexttopic之间的提交:

master

没有 o---o---o---o---o master | \ | o'--o'--o' topic \ o---o---o---o---o next ,使用--onto,您最终会复制 git rebase master topic之上的所有nextnexttopic共享master之后的相同分支点):

master

o---o---o---o---o master \ \ \ o'--o'--o'--o'--o'--o'--o'--o' topic \ o---o---o---o---o next 之后的前5次提交是master的“相同”提交。)