Github "Squash and Merge" - subsequent pull request showing all previous changes

时间:2018-03-09 19:16:52

标签: git github squash

I have a branch which I pulled from master branch. Let's call it integration.

In the integration branch, I made various commits (C1, C2, C3). When I am done, I made a Pull Request to the master branch. From the master branch, I did a "Squash and Merge" so it results in only a single commit in the master. This all seems great.

But then later, I made some additional changes to the integration branch and when I make a pull request again, I am seeing all the commit comments of previous changes (C1, C2, C3, C4) that I have already committed. This issue is not seen if I use the default "Create an Merge commit" in my earlier commit. What did I do wrong?

2 个答案:

答案 0 :(得分:7)

视觉上更容易理解。这是你的回购。 master位于提交B,您的feature分支位于提交C3

A - B [master]
     \
      C1 - C2 - C3 [feature]

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

A - B ------------- BC123 [master]
     \            /
      C1 - C2 - C3 [feature]

壁球和合并就是这样。

A - B ------------- BC123 [master]
     \
      C1 - C2 - C3 [feature]

BC123包含与之前相同的合并内容,但与feature分支没有任何关联。同样,feature不会改变。 feature不会被压扁,它会四处乱窜。相反,BC123包含来自feature的压缩变更。

当您在feature上完成更多工作时,在此处提交C4C5,就会发生这种情况。

A - B ------------- BC123 [master]
     \
      C1 - C2 - C3 - C4 - C5 [feature]

当您发出提款请求时,feature中的所有更改都不会显示在master中。至于Git关注的是C1C5。如果你要挤压&再次合并,master会有一个新的提交,但只有C4和C5的内容,因为Git非常善于找出分支之间的重复内容。

A - B ------------- BC123 - C45 [master]
     \
      C1 - C2 - C3 - C4 - C5 [feature]

虽然可以以这种方式工作,但这很令人困惑。

长话短说:一旦你合并了一个分支,就再也不用了。删除它。如果你需要做更多工作,请打开一个新分支。

  

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

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

A - B ------------- BC123 [master]
     \            /
      C1 - C2 - C3 [feature]

如果您在feature ...

上做更多工作
A - B ------------- BC123 [master]
     \            /
      C1 - C2 - C3 - C4 - C5 [feature]

然后执行拉取请求,Git会向您显示feature中不在master中的提交。由于合并,master包含C1C2C3。因此PR只向您显示C4C5。这仍然令人困惑,同样的建议适用:合并分支后,删除它。如果你需要做更多工作,请打开另一个。

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

答案 1 :(得分:3)

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

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

第一次"壁球和合并"不影响整合分支;集成提交如何出现在主分支上。因此,有意义的是A,B和&由于您正在重复使用旧分支,因此C仍然存在。

祝你好运。