Git 分支 - HEAD 分支上的拉取请求也需要之前的分支提交

Git branching - pull request on HEAD branch takes also prior branch commits

我来自IBM RTC,所以我需要习惯Git。
我分叉了一个存储库,在我的主分支上做了几次提交并打开了一个拉取请求。

Pull request:
original-repository/master <- my-repository/master
  commit-1
  commit-2

然后我创建了一个新分支并推送了一个更改。我打开了另一个从新分支开始的拉取请求,这就是我找到的。

Pull request:
original-repository/master <- my-repository/newbranch
  commit-1
  commit-2
  commit-3

如果我想要一个只有 commit-3 的拉取请求怎么办?

我真的很惊讶它不是重复的... 事实证明 . Commit-wise 它是重复的(即有一个分支有 2 个不必要的提交)。但是,问题的表述方式完全不同(例如,另一个问题没有提到拉取请求),如果不是我的答案,我也不会找到它。

使用git rebase --onto.

在您的本地存储库中:

git checkout newbranch
git rebase master --onto origin/master
git push origin +newbranch  # May look slightly different for you; The point is, you need to force push (the + does that).

注意,在第二行中,master 可以替换为 HEAD~ 或其他对 commit-2 的引用。

简短说明:git 获取指向它的提交(在本例中为 master)和当前提交之间的提交,并在定义为 [= 的点上逐一复制它们16=]。如果无法自动应用某些提交,则该过程将暂停,您必须手动解决冲突。

警告:do not force-push unless you are sure it's safe。如果你推送到你自己的 fork 存储库并且可以假设没有其他人使用它,你可能没问题(即使它在技术上是 public)。这是您的私人分支机构,有时可能足以说明它很好。但了解与删除历史记录(或尝试)相关的风险很重要。

备选方案(精选): 详细介绍了一些备选方案。那里的情况基本相同,分支 F1 包含不必要的提交。