Github "Squash and Merge"- 显示所有先前更改的后续 pull 请求

标签 git github squash

我有一个从 master 分支中 pull 出的分支。我们称之为集成。

在集成分支中,我进行了各种提交(C1、C2、C3)。完成后,我向 master 分支发出了 Pull Request。从 master 分支,我做了一个“Squash and Merge”,所以它只在 master 中产生了一个提交。这一切看起来都很棒。

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

最佳答案

视觉上更容易理解。这是你的 repo 协议(protocol)。 master 位于提交 B,您的 feature 分支位于提交 C3

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

正常 merge 会执行此操作。添加了一个新的 merge 提交 BC123,将 master 中的内容与 feature 中的内容相结合。这些历史是联系在一起的。注意 feature 没有移动,它仍然在 C3

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

压缩和 merge 就是这样做的。

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

BC123 包含与以前相同的 merge 内容,但没有连接到 feature 分支。同样,feature 没有改变。 feature 不会被压扁,它会一直存在。相反,BC123 包含来自 feature 的压缩更改。

当您在 feature 上做更多工作时,会在此处提交 C4C5,这会发生。

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

并且当您发出 pull 请求时,feature 中不在 master 中的所有更改都会出现。就 Git 而言,它是 C1C5。如果您要再次压缩和 merge ,将会在 master 上有一个新的提交,但只有 C4 和 C5 的内容,因为 Git 非常擅长找出分支之间的重复内容。

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

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

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

This issue is not seen if I use the default "Create an Merge commit" in my earlier commit.

回到 merge 后的版本...

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

如果您在功能上做更多的工作...

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

然后执行 pull 请求,Git 将向您显示 feature 中不在 master 中的提交。由于 merge ,master 包含C1C2C3。所以 PR 只显示了 C4C5。这仍然令人困惑,同样的建议适用: merge 分支后,将其删除。如果您需要做更多工作,请打开另一个。

虽然压缩和 merge 更简单,但 merge (正确完成)为 Git 提供了更健康的历史记录和更多信息。如果您了解分支和 merge 的工作原理,您将会从 Git 中获得更多 yield 。

关于Github "Squash and Merge"- 显示所有先前更改的后续 pull 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49200667/

相关文章:

git - 为什么 Git 每次推送 origin master 时都会发送整个存储库

git - 如何压缩分支中的提交

git - git merge --squash 是否会导致跨分支 merge 令人头疼

git 与 --no-ff 和 --squash merge

git - 如何撤消 dp (或 :diffput) in vimdiff, "u"不起作用

git:如何防止从上游 repo 中获取标签?

git - smartgit 删除提交并返回上一个提交

BitBucket上的GitHub部署方法

git - 用图形查看本地 git 提交

git - 我如何压缩所有提交历史并推送到另一个远程存储库?