将一个git分支移动到另一个具有不同Parent的分支?

时间:2016-07-21 07:57:02

标签: git

我有一个git分支结构

     feature
     /
    /
o master
    \
     \
    develop

masterdevelop目前相同,即develop中没有其他提交。

现在,我想将feature分支的父级移动到develop,以便结构变为:

o master
    \
     \
    develop
        \
         \
        feature

没有必要保留feature的提交历史记录。我只想将当前状态feature移动到父级为develop的分支。这是必需的,以便将来可以与develop合并,而不会影响master

我是git的新手,并不知道合并/ rebase等。详细步骤将不胜感激。

2 个答案:

答案 0 :(得分:2)

  

masterdevelop目前相同,即develop中没有其他提交。

您无需做任何事情。您的回购已经处于您想要的状态。

但是,添加新提交时,只有当前签出的分支会发生更改;其他人留在原地。这意味着,如果您签出develop并在其上提交内容,您的仓库将达到第一个图表中描述的状态。

您需要的命令将其置于第二个图中描述的状态:

git rebase develop feature

或者,您可以这样做:

git checkout feature
git rebase develop

这是命令的第一种形式在内部的作用。

与操作历史记录的任何Git命令一样,它需要一个干净的工作目录才能工作。在进行rebase之前,你必须提交(或存储)所有内容。

答案 1 :(得分:1)

  

master和develop目前是相同的,即没有额外的提交。

然后你已经完成了。你不需要做任何事情。分支与另一个分支无关,即git中没有“父分支”的概念。

分支只是指向提交的名称,如果愿意,则是别名。提交“是”(非常字面意思)您习惯使用的神秘哈希值(即git log所示)。提交本身是实际的“第一类”对象,分支只是一对字符串(一个是名称,另一个是提交哈希)。

  

现在,我想移动功能分支的父级来开发

这就是git rebasegit rebase feature develop的情况。它完全符合您的要求,非常适合这项工作。在您的特定情况下,developmaster指向同一个提交,这是一个无操作,但在任何其他情况下,develop从{{1}移开},您将使用master

顺便说一下,你会发现许多建议来避免rebase,暂时忽略它。它是git中的一个很棒的工具,除非与偏见或无知接近。与他人合作时必须小心(即分布式存储库,推/拉);你不能真正打破任何东西,只是让你的同事很难。但这是另一个问题。