GIT - 合并后分支未关闭

5
我们对使用GIT并不太熟悉。实际上,我们很喜欢分支的概念;-) 但是某个用户的所有合并操作似乎不能关闭分支...
您可以在这里查看图片:http://i54.tinypic.com/297i14.png 有一个灰色和一个蓝色的线,它们刚刚向前直线...即使在合并之后也是如此...那么他做错了什么?有什么提示吗?我不想想象如果他创建了更多的分支,如果它们在合并后都在历史视图中存在会发生什么...
非常感谢!

所以我进一步注意到的是:检查提交记录: - Bosh
所以我进一步注意到的是:检查这些提交记录,总是存在两个相同的子节点或父节点……就像这里(2次css):父节点:da83bd237192637ddd1824130cfafd68d8e9c352(熊猫之舞) 父节点:f5c6663c6248dbd79002d0b9b25423cbc90e0380(雪泥糕) 子节点:0ffa08f817ecdbe46cdffe5ae25689cb6ddcb575(层叠样式表) 子节点:0ffa08f817ecdbe46cdffe5ae25689cb6ddcb575(层叠样式表) 子节点:358034839b7f5a9f0de49b812f1f367d526b17e2(将分支“master”合并到trtrtr中)实际上,他的提交记录是唯一同时包含两个相同引用的记录……我认为这真的没有意义。 - Bosh
3个回答

16

当你执行合并操作时,新提交只会使你当前的分支向前移动,指向另一个分支的分支名称仍然保持不变。换句话说,如果你遇到这种情况:

A---B---C blue
 \
  D---E---F grey

...然后执行以下操作:

git checkout blue
git merge grey

最终你会得到:

A---B---C---G blue
 \         /
  D---E---F grey
如果您想删除“灰色”分支,可以执行命令git branch -d grey。这不会影响提交图表,只会删除分支——它们就像在提交图表中移动的标签一样。
但是,如果您继续在“灰色”和“蓝色”分支上创建更多的提交,则这些线条将继续存在:
A---B---C---G---H---I blue
 \         /
  D---E---F---J---K---L grey
在您提供的图像中,我假设要么在您展示的部分之上还有更多的提交,要么您使用的工具只是以奇怪的方式呈现提交图。

没有更多的提交在这些分支中... 这是奇怪的事情。在合并后,没有提交,这个用户的分支仍然保持打开状态... - Bosh
那么,你是从哪个工具中得到了这个可视化呢?如果你能让它显示分支名称,那可能会更清晰 - 分支由其顶部的单个提交定义:该提交及其所有祖先都在分支上,而任何“超出”它的内容都不是分支的一部分。 - Mark Longair

3
我不确定你所说的关闭分支是什么意思,但我猜测一下 :)
即使合并完成后,仍然可以使用分支。我认为这是按设计应该的方式。例如,即使合并已经完成,您可能仍想继续使用该分支进行开发,以便继续专注于该分支的开发。这就是为什么在您所提到的图像中仍然显示该分支的原因。
如果您不想这样做,可以在合并后删除该分支,通过在另一个分支(如master)中输入命令git branch -d <branch>来永久关闭它。(只有当其最新提交已与您正在使用的分支合并时,才会删除此分支,因此不会有数据丢失的风险。)

今天我们将尝试删除所有未使用的分支...但如果这种情况再次发生,我认为我们应该重新安装Eclipse和EGit在这个用户的电脑上... - Bosh
由于这是按设计来的,它会再次发生。如果您想这样做,请养成在合并完成后删除分支的习惯。例如,我自己有一个用于测试的分支,我会将其与主分支来回合并,因此实际上没有必要删除该分支。其他例子包括为每个开发人员创建单独的分支,在其中进行主要开发(然后在完成一步后与主分支合并)。 - Jimmy Stenke

1

目前,Git在合并和关闭“任务”分支方面需要进行两个步骤。合并通常表示任务已经完成,该分支不再需要。

也许对于某些人来说,能够删除分支的refs/heads条目以便一次性关闭所有内容会是一个有用的选项[向git列表提出建议?]。然而,我相信许多工作流程都有一些实例,他们希望能够返回并整理一些小问题,而早期的删除会使这变得棘手(尽管它会在reflog中保留一段时间)。

让用户创建一个别名或脚本来组合这两个操作。这将有助于全面的教育;-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接