Github"壁球和合并" - 随后的拉动请求显示所有先前的更改

som*_*ser 8 git github squash

我有一个分支,我从主分支.我们称之为整合.

在集成分支中,我做了各种提交(C1,C2,C3).当我完成后,我向主分支发出了拉取请求.在master分支中,我做了一个"Squash and Merge",因此只能在master中进行一次提交.这一切看起来都很棒.

但后来,我对集成分支进行了一些额外的更改,当我再次发出pull请求时,我看到了我已经提交的先前更改(C1,C2,C3,C4)的所有提交注释.如果我在之前的提交中使用默认的"创建合并提交",则不会出现此问题.我做错了什么?

Sch*_*ern 7

视觉上更容易理解.这是你的回购.master是在提交B,你的feature分支是在提交C3.

A - B [master]
     \
      C1 - C2 - C3 [feature]
Run Code Online (Sandbox Code Playgroud)

正常合并就是这样做的.添加了一个新的合并提交,BC123将内容master与中的内容相结合feature.历史是联系在一起的.注意,feature不动,它仍然在C3.

A - B ------------- BC123 [master]
     \            /
      C1 - C2 - C3 [feature]
Run Code Online (Sandbox Code Playgroud)

壁球和合并这样做.

A - B ------------- BC123 [master]
     \
      C1 - C2 - C3 [feature]
Run Code Online (Sandbox Code Playgroud)

BC123包含与以前相同的合并内容,但没有与feature分支的连接.而且,feature不会改变.feature不会被压扁,它会粘在一起.而是BC123包含来自的压扁变化feature.

当你做更多的工作feature,提交C4C5在这里,这发生了.

A - B ------------- BC123 [master]
     \
      C1 - C2 - C3 - C4 - C5 [feature]
Run Code Online (Sandbox Code Playgroud)

当您发出拉取请求时,将显示feature未输入的所有更改master.至于Git关注的C1C5.如果你再次压缩和合并,会有一个新的提交master,但只有C4和C5的内容,因为Git非常善于找出分支之间的重复内容.

A - B ------------- BC123 - C45 [master]
     \
      C1 - C2 - C3 - C4 - C5 [feature]
Run Code Online (Sandbox Code Playgroud)

虽然你可以这样工作,但这很令人困惑.

长话短说:一旦你合并了一个分支,就不再对它进行处理了.删除它.如果您需要做更多工作,请打开一个新分支.

如果我在之前的提交中使用默认的"创建合并提交",则不会出现此问题.

回到合并版本......

A - B ------------- BC123 [master]
     \            /
      C1 - C2 - C3 [feature]
Run Code Online (Sandbox Code Playgroud)

如果你做更多的工作feature......

A - B ------------- BC123 [master]
     \            /
      C1 - C2 - C3 - C4 - C5 [feature]
Run Code Online (Sandbox Code Playgroud)

然后做一个pull请求,Git会告诉你feature不在的提交master.由于合并,master包含C1,C2C3.所以PR只会告诉你C4C5.这仍然令人困惑,同样的建议适用:合并分支后,删除它.如果您需要做更多工作,请打开另一个.

虽然壁球和合并更简单,但合并(完成正确)可以为Git提供更健康的历史记录和更多信息.如果您了解分支和合并的工作原理,您将从Git中获得更多.

  • @someuser:是的,区别在于“只是”合并箭头。但这是一个巨大的差异:它改变了*合并基*(后来的合并),它是合并作为动词动作的三个输入之一。使用不同的合并基础,您会得到不同的合并结果。 (2认同)

Jam*_*tti 5

如果我理解你的情况是正确的......

您做错的主要事情是在合并后继续使用分支。合并后,删除分支。额外的工作应该在一个新的分支上。

第一个“Squash and Merge”不影响集成分支;集成提交如何出现在主分支上。因此,由于您正在重用旧分支,因此 A、B 和 C 仍然存在是有道理的。

祝你好运。