Git:如何合并已关闭的拉取请求中的更改?

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

几周前,我收到了来自

my:abc
的针对我的分支
them:xyz
的拉取请求 (PR)。

截至今天,PR 已关闭。 在PR中,

them:xyz
现在被替换为
unknown repository
,想知道这是什么意思,怎么会发生?

现在我想合并这些更改,但不幸的是我无法联系另一个人以获得新的 PR(谁提出了拉取请求)。

但是我仍然有拉取请求(这很好)。
有什么方法可以合并或挑选这些更改吗?

注意:PR属于商业公司,所以不能在这里分享。

git github
4个回答
3
投票

如果 GitHub 上仍有拉取请求,您可以从 GitHub 将拉取请求作为补丁下载,在本地合并,然后推送更改。

来自 GitHub 拉取请求页面:

通过命令行合并

如果您不想使用合并按钮或自动合并 无法执行,可以通过命令进行手动合并 线。补丁

第 1 步:从项目存储库中签出新分支并进行测试 的变化。

git checkout -b new-branch master
curl https://github.com/USER/REPOSITORY/pull/1.patch | git am

第 2 步:合并更改并在 GitHub 上更新。

git checkout master
git merge --no-ff new-branch git push
origin master

3
投票

您始终可以挑选任何提交。
一旦你向 git 提交了一些内容并且仍然有分支,内容将保留在 git 下,除非你使用

git gc
将其删除

在你的情况下,它更简单,你有分支,也有代码(PR =完全更改),所以你可以使用

cherry-pick
或简单地将PR中的代码添加到你的分支。

您始终可以尝试将 PR 设置为合并到您的新分支中。


一般评论

克隆后,所有 github 拉取请求也会存储在您的存储库中。
它存储在 ref 文件夹旁边的 .git 文件夹中,因此您也可以在本地拥有它。

// get locally the ID pull request
git fetch origin pull/ID/head:BRANCHNAME 

1
投票

我几天前遇到了这个问题

在我的例子中,我想要访问的PR是另一个人的分叉,它当前不存在,所以不能直接从他的分叉中拉出“当前不存在”

所以我通过执行以下步骤来处理它

解决方案:-

1-我使用

.batch
扩展名从浏览器本身访问了拉取请求 https://github.com/xxxxx/xxxx/pull/123.patch

这将被重定向到一个文件,该文件的路径中带有令牌,类似这样 https://patch-diff.githubusercontent.com/raw/xxxx/xxx/pull/123.patch?token=xxxxxxxxxxxxxxxx

2-然后我使用命令在项目目录中下载这个.batch

curl -O https://patch-diff.githubusercontent.com/raw/xxxx/xxx/pull/123.patch?token=xxxxxxxxxxxxxxxx

注意大写字母O

这将下载文件,就像这样 123.patch_token=xxxxxxxxxxxxxxxx

3-我使用

git apply
应用了此文件中存在的更改,并添加了
.patch
扩展名
git apply 123.patch_token=xxxxxxxxxxxxxxxx.patch

在此步骤中,您可以在本地计算机上进行更改,然后添加并提交它们

git add . 

git commit -m "merging 123 PR "

注意: 记得删除我们实际上不想将其推送到 PR 的 .patch 文件

这一切,


0
投票

askielboe 的答案对我来说效果很好,当我处于类似的情况时(2024-11-15),有两个修改:

  1. curl https://github.com/USER/REPOSITORY/pull/1.patch | git am
    没有为我工作。所以我访问了https://github.com/USER/REPOSITORY/pull/1.patch并发现我被重定向到https://patch-diff.githubusercontent.com/raw/USER/REPOSITORY/pull/1 .patch,无论出于何种原因。
    curl https://patch-diff.githubusercontent.com/raw/USER/REPOSITORY/pull/1.patch | git am
    did为我工作。谁知道为什么,哈哈。
  2. 我没有做任何分店业务。只需一个命令就可以了:它将补丁下载为邮件文件(如电子邮件),并使用 git am(应用邮件)将其作为补丁应用;正如您所期望的,这会在您当前正在进行的任何提交之上创建一个新的提交。

正如其他答案和评论所说,您也可以

git fetch origin pull/ID/head:BRANCH_NAME
à la https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in- pull-requests/checking-out-pull-requests-locally,如果这对你更有用的话。

© www.soinside.com 2019 - 2024. All rights reserved.