Rebase只是分支的一部分

Pup*_*ppy 41 git

我有两个分支(和主人).分支2基于分支1是基于主.我已经提交了分支1进行审核,它有一些更改,我将其中一些更改重新编入历史记录并将结果合并到主数据中.

现在我需要在master上重新设置Branch 2以准备审查/合并.

问题是分支2仍然包含分支1的原始提交,它不再存在,因此git会混淆.我尝试使用rebase -i删除Branch 1的原始提交,但是Branch 2的提交不基于master-before-branch-1.

我需要做的是采取分支2,删除一些提交,并在一次操作中仅重新设置master上的剩余提交.但我只知道如何在两个不同的步骤中完成这两项操作.

我怎样才能将我的分支部分重新分支到另一个分支,删除所有不具有共同祖先的提交,除了我指定的那些(例如从HEAD~2起)?

这是当前状态:

master                     new branch 1
- - - - - - - - - - - | - - - - - - - - -
    \
     \   branch 1
      \ _ _ _ _ _ _ _
                     \
                      \     branch 2
                       \ _ _ _ _ _ _ _
Run Code Online (Sandbox Code Playgroud)

我最终想要的是:

master            new branch 1    
- - - - - - - | - - - - - - - - - -
                                   \
                                    \
                                     \
                                      \    branch 2
                                       - - - - - - - - - 
Run Code Online (Sandbox Code Playgroud)

Von*_*onC 57

实际的命令是:

git rebase --onto newbranch1 branch1 branch2
Run Code Online (Sandbox Code Playgroud)

在HEAD 之后,这将在new_branch1所有提交之上重播. branch1branch2

由于约书亚·戈德堡把它的评论:

 git rebase —-onto <place-to-put-it> <last-change-that-should-NOT-move> <change to move>
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,棘手的事情是理解帮助中的“上游”意味着保持不变。`git rebase —onto &lt;place-to-put-it&gt; &lt;last-change-that-should-NOT-move&gt; &lt;change to move&gt;` (5认同)

Pup*_*ppy 23

解决方案比我预期的要简单得多.事实证明,你可以提供-i更多种类的rebase命令(我认为它只是为了改变历史而将一个分支重新定位到自身).所以我只是运行git rebase -i master并删除了那些额外的提交.

  • 为了澄清@Puppy所做的工作,是从分支2到新分支1进行交互式重新设置(在分支2上为`git rebase -i new_branch_1`),并使用交互式控制台删除所有分支1提交,因此仅播放分支2的提交。 (2认同)

Nel*_*elu 7

git rebase --onto master HEAD~2
Run Code Online (Sandbox Code Playgroud)
  • master - 您要重新定位的分支
  • 2 - 您需要重新定位的当前分支的最后 n 次提交

来源