我有一个git分支结构
feature
/
/
o master
\
\
develop
master
和develop
目前相同,即develop
中没有其他提交。
现在,我想将feature
分支的父级移动到develop
,以便结构变为:
o master
\
\
develop
\
\
feature
没有必要保留feature
的提交历史记录。我只想将当前状态feature
移动到父级为develop
的分支。这是必需的,以便将来可以与develop
合并,而不会影响master
。
我是git的新手,并不知道合并/ rebase等。详细步骤将不胜感激。
答案 0 :(得分:2)
master
和develop
目前相同,即develop
中没有其他提交。
您无需做任何事情。您的回购已经处于您想要的状态。
但是,添加新提交时,只有当前签出的分支会发生更改;其他人留在原地。这意味着,如果您签出develop
并在其上提交内容,您的仓库将达到第一个图表中描述的状态。
您需要的命令将其置于第二个图中描述的状态:
git rebase develop feature
或者,您可以这样做:
git checkout feature
git rebase develop
这是命令的第一种形式在内部的作用。
与操作历史记录的任何Git命令一样,它需要一个干净的工作目录才能工作。在进行rebase之前,你必须提交(或存储)所有内容。
答案 1 :(得分:1)
master和develop目前是相同的,即没有额外的提交。
然后你已经完成了。你不需要做任何事情。分支与另一个分支无关,即git中没有“父分支”的概念。
分支只是指向提交的名称,如果愿意,则是别名。提交“是”(非常字面意思)您习惯使用的神秘哈希值(即git log
所示)。提交本身是实际的“第一类”对象,分支只是一对字符串(一个是名称,另一个是提交哈希)。
现在,我想移动功能分支的父级来开发
这就是git rebase
或git rebase feature develop
的情况。它完全符合您的要求,非常适合这项工作。在您的特定情况下,develop
和master
指向同一个提交,这是一个无操作,但在任何其他情况下,develop
从{{1}移开},您将使用master
。
顺便说一下,你会发现许多建议来避免rebase
,暂时忽略它。它是git中的一个很棒的工具,除非与偏见或无知接近。与他人合作时必须小心(即分布式存储库,推/拉);你不能真正打破任何东西,只是让你的同事很难。但这是另一个问题。