Git 两个分支指针,但合并一个

Git 两个分支指针,但合并一个,git,merge,branch,Git,Merge,Branch,有人能解释一下,为什么在这种情况下: A--B--C--D (master) \ \E--F (feature/xxx, feature/xxx-blah) 如果我将功能/xxx blah合并到master,分支指针实际上不会移动?提交在那里,master指针是高级的,但这两个功能都指向同一个提交F 我本以为会有这样的结局: A--B--C--D--G (master, feature/xxx-blah) \ / \E--F/ (featu

有人能解释一下,为什么在这种情况下:

A--B--C--D  (master)
    \
     \E--F  (feature/xxx, feature/xxx-blah)
如果我将
功能/xxx blah
合并到
master
,分支指针实际上不会移动?提交在那里,
master
指针是高级的,但这两个功能都指向同一个提交
F

我本以为会有这样的结局:

A--B--C--D--G  (master, feature/xxx-blah)
    \      /
     \E--F/  (feature/xxx)

这是按设计工作-当您合并时,您只推进当前分支。这实际上是一个有用的属性,因为如果它按照您的预期工作,那么在合并它之后,您将很难判断功能分支上的内容-
master
feature/xxx blah
将包含完全相同的提交

在大多数情况下(特别是“瓷”命令),git中创建新提交的操作将推进当前分支,但不会作为副作用推进任何其他分支


另一点可能值得一提的是,您可以从任何提交(或多个提交)中进行合并—它们不必是分支。

您评论doing
no ff
merges这一事实解释了为什么您希望:

A--B--C--D--G  (master, feature/xxx-blah)
    \      /
     \E--F/  (feature/xxx)
但如“”中所述,
no ff
不是默认值。

你会在“.”中看到类似的情况。

如果你把糖倒进咖啡里,你是否认为糖会有咖啡;不,你得到的是加糖的咖啡。(用主枝代替咖啡,用特色枝代替糖)。@DanD。那太好了——我必须记住这个比喻:)好的,我明白了。出于某种原因,我的印象是,合并功能实际上在所有情况下都会移动功能指针。我不知道为什么(是的,我没有进行ff合并)。必须再喝点咖啡(