如何在合并请求中删除其他人的提交

How to remove commits from other's in merge request

我现在拉远程分支的时候遇到了问题。

一旦我解决了所有冲突的情况,我必须提交他们的所有更改。

因此,一旦我创建合并请求,它就会包含所有这些请求。
因此很难复习。我现在只想提交我的内容。

您将如何解决这些冲突以使合并请求更易于审查?

我有更多问题如下:

假设我有 2 个分支:A has commits (a, b) B has commits (c, d)。我还创建了合并请求 (MR)(MR-AMR-B)到 master。这样 MR-A has (a, b)MR-B has (c, d) 就会在里面提交。但是,如果我在 A 分支,那么我会重新设置分支 B 的基址,以便 MR-A has (a, b, c, d)MR-B also has (c, d) 时提交。最后我将 MR-A 合并到 master。然而 MR-B still has (c, d)

问题是:如何从 MR-B 中删除 c, d

Rebase 是您要查找的内容,而不是合并。

阅读:
When do you use git rebase instead of git merge?
What's the difference between 'git merge' and 'git rebase'?

如果您只 pull(不是 pull --rebase),那么合并的解决涉及提交(而不是 git add + git rebase --continue

这意味着您可以进行一次或 多次 提交以完全解决在 git 拉取后检测到的冲突。

所以您需要做的就是 git add -p,只添加大量冲突文件:

  • 首先是不属于您的大量代码
  • 然后是你的

这样,您最终会得到 单独的 提交。而且你可以提出更精确的合并请求,更容易审查。

这对于 rebase 来说更难做到,一旦你修复了有冲突的文件并将其添加到索引中,它只会进行一次提交。


How could I remove the c, d from MR-B?

你不需要:你只需删除 MRB:如果你在 MRB 之上重新设置了 MRA,然后将 MRA 合并到 master,MRB 没有任何作用:它的所有提交都已合并。

如果 MRB 有更多提交,并且你想删除 b 和 c,只需执行 git rebase -i:这将在交互模式下重新设置 MRB 的基线,允许你删除提交 b 和 c,保留其他提交。强制推送 MRB,您可以继续修复 B。