如何为每个单独的提交发送一个拉取请求?

问题描述 投票:0回答:3

我分叉了一个项目。我花了一点时间。

我现在有十个不同的提交,每个提交都独立于其他提交。 我想将每个单独的提交作为单独的拉取请求发送,以便让上游的维护者选择他/她想要的。

我找不到简单的方法来做到这一点。

我能找到的“最简单的”方法是创建十个单独的分支,然后将十个单独的提交挑选到这些分支中,然后从每个分支发送拉取请求。

这……不太理智! (例如,请参阅 github 上的如何将一个拉取请求分成两个不同的拉取请求

底层的

git request-pull
函数支持这个工作流程,那么这里的问题是 GitHub 没有一个良好的接口吗?我注定要创建十个分支吗?

git github pull-request
3个回答
21
投票

GitHub 的 Pull 请求被设计为针对每个分支,而不是针对每个提交。 这是故意的

发送拉取请求后,推送到您分支的任何新提交都将自动添加到拉取请求中。如果您需要进行更多更改,这尤其有用。

如果您想在 GitHub 中发送 10 个 Pull 请求,则必须使用 10 个分支来完成。唯一的例外是,如果您等待每个 Pull 请求合并后再提交下一个请求。


3
投票

Grason Koonce 建议的解决方法相当于:

为每个片段创建连续的分支,并对前一个分支点(而不是目标分支)发出拉取请求。

所有审核并接受后,按相反顺序合并 5->4、4->3、3->2、2->1,然后才是 1->master/target。

这并不漂亮,但它是一个解决方案。

https://graysonkoonce.com/stacked-pull-requests-keeping-github-diffs-small/


0
投票

您可以轻松编写脚本。这里是PowerShell,但是可以调整为sh。

$c=git log origin/main...patches --format=%h
$i=1
foreach ($h in $c) {
  git checkout -b mypatch-$i origin/develop
  if ($LASTEXITCODE -ne 0) { throw $LASTEXITCODE }
  git cherry-pick $h
  if ($LASTEXITCODE -ne 0) { git cherry-pick --abort }
  ++$i
}

# verify state before push

# `git remote get-url my` can be used to automate this 
$url='https://github.com/user/repo/pull/new/mypatch-'

foreach ($n in 1..$i) { 
  git push my mypatch-$n
  start $url$n
  # or use gh-cli to create pr automatically
}
© www.soinside.com 2019 - 2024. All rights reserved.