git将分支合并到master中,而不需要从父分支进行更改

时间:2018-06-15 19:02:58

标签: git merge branch

我有三个git分支:master,A和B.A基于master而B基于A.是否可以将B合并到master而不需要更改A?

3 个答案:

答案 0 :(得分:2)

是的,您可以但不能重写git历史记录,这可能导致共享分支上的问题。因此,在此之前,请确保您不会阻止任何人工作,或最糟糕的删除它。要做到这一点,你必须使用git rebase

让我们说你的历史看起来像是

              -- D  branch-b
             /
     -- B -- C       branch-a
    /
A --                master

A,B,C和D代表您的提交。

你必须要做

git checkout branch-b #go on branch-b
git rebase -i HEAD~3  

第二行有点解释:

git rebase用于执行压缩,删除和重写提交等操作,以便在另一个目标提交时重新应用它们。

git rebase -i HEAD~3将允许您将branch-b HEAD 中的最后3次提交重写为之前的提交。您还可以使用目标提交的id哈希。

它将打开您配置的文本编辑器,它应该看起来像

pick aaaa111 Commit B message
pick aaaa222 Commit C message
pick aaaa333 Commit D message

pick字改为drop或注释要删除的提交行,两者的工作方式相同。

#pick aaaa111 Commit B message # Comment the line will make rebase drop the commit
drop aaaa222 Commit C message  # Replacing the pick by drop will also
pick aaaa333 Commit D message

保存并退出编辑器。您可能会遇到冲突以解决将文件置于所需状态的问题。您可以随时使用git rebase --abort中止rebase操作。一旦解决了冲突,请执行

git add .
git rebase --continue

直到rebase完成。你的历史看起来像

      ----- D'      branch-b
     /        
     -- B -- C      branch-a
    /
A --                master

并非branch-b上的提交被命名为D',因为rebase将使用更改而重新创建新提交而不使用第一个提交。

不要忘记,变基会使您的本地历史记录与远程记录不同步,并且当您必须共享该分支时可能会导致问题。

答案 1 :(得分:1)

" git rebase -i"使用手动提交删除工作,但有更简单的命令:

git rebase --onto <newbase> <upstream> <branch>

在您的情况下,您想要更改&#34; B&#34;,因此<branch> = B,截止点<upstream> = A,您的目标<newbase> =掌握,所以你运行:

git rebase --onto master A B

之后,你的B分支只有在从A分叉后才会添加提交。

最后,您可以像往常一样将B合并到主人。

这是破坏性的,所以首先进行B备份是明智的:

git branch B-backup B

答案 2 :(得分:-1)

不,这是不可能的,因为当你从A中删除一个分支B时,它将拥有B中的所有提交和更改。