从我的拉取请求中删除其他提交

时间:2021-04-01 15:21:19

标签: git branch pull-request

最佳实践问题。我从功能分支(功能-A)打开了一个新分支(功能-B)。在我完成新分支的工作后,我提交并推送了我的更改 (--set-upstream) 然后我设置了 PR。

我们使用 Bitbucket。我在 Bitbucket UI 中看到,我的 PullRequest 中有来自 Branch 功能 A 的提交。

从我的 PR 中删除来自功能 A 的提交的最佳/最优雅的方法是什么?我是否必须删除它,因为我也可以等到另一个 PR(来自 feature-A)被记住。

2 个答案:

答案 0 :(得分:0)

  1. 如果您对 B 进行了很小的更改,那么只需从正确的源分支创建一个新分支,然后进行更改即可。

  2. 如果您在 B 中进行了大量更改,您可以在您的分支中从 feature-A 恢复更改,但是 feature-A 只会将其放回原处。

  3. 如果 feature-A 有很多变化,而 B 有很多变化,从主源分支创建一个新分支 feature-C(例如 develop ) 然后 cherry pick 您从 feature-B 更改为 C。这应该会为您提供一组“干净的”您自己的更改,这些更改可以合并到 develop,而无需源自 feature-A 的更改。

答案 1 :(得分:0)

删除特性一个分支不会有什么不同。让我们看看这里发生了什么。请考虑下图。

          master
            |
C1 <- C2 <- C3    featureA
             \      |
              C4 <- C5
                     \
                      C6 <- C7
                             |
                            featureB

让我们首先就git中的分支是什么达成共识。 git 中的分支是对提交的引用。分支不是提交链。因此,从上图中,master 是对提交 C3 的引用。我们不说 C6C7 是分支 featureB。我们说 featureB 引用 C7

如果可以从分支提交访问,则称该提交属于一个分支。 C6 是可访问的(如箭头所示)。在 git 中,每个提交都指向前一个,称为父提交。因此,C2C3 的父级。例外情况是:没有任何父项的初始提交 C1 和具有两个父项的合并提交。

现在,回到最初的问题,当您针对 featureB(或集成分支)创建 master 的 PR 时,git 会看到 master 和 {{1} 之间的变化} 包括提交 featureB 到,包括 C4。如果你删除一个分支,你只是删除对提交的引用,你不会删除提交。让我们看看删除分支后 repo 的样子:

C7

如您所见,该分支只是一个指向提交的指针,被删除了。因此,git 仍然会看到 master | C1 <- C2 <- C3 \ C4 <- C5 \ C6 <- C7 | featureB master 之间的更改涉及提交 featureB 到,包括 C4

这回答了您的问题,即为什么您会看到来自 C7 的提交以及为什么删除 featureA 无济于事。