如何获取我不拥有的分支的未合并拉取请求?

67 git github git-pull pull-request

我需要在NServiceBus repo中提取一个特定的pull请求(尚未处理到主流中):

https://github.com/johnsimons/NServiceBus/commit/d8524d53094e8181716e771c1023e968132abc15

这显然不是我的回购,但我需要拉动请求中存在的更改.

做这个的最好方式是什么?

小智 74

要获取存储库中的内容:

git fetch git@github.com:jboss/jboss-common-beans.git refs/pull/4/head
Run Code Online (Sandbox Code Playgroud)

然后用FETCH_HEAD做任何你想做的事:

git checkout -b new-branch FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)

  • 尝试这个,我收到一个错误:`致命:找不到远程引用 refs/pull/1041/head`。=/ (2认同)
  • 你需要将`git@github.com:jboss/jboss-common-beans.git`设置为远程`upstream`,然后执行:`git fetch upstream refs/pull/4/head` (2认同)

小智 56

git pull origin pull/28/head
Run Code Online (Sandbox Code Playgroud)

要么

git fetch origin pull/28/head:28
git checkout 28
Run Code Online (Sandbox Code Playgroud)

我可以提取一个尚未合并的拉取请求吗?

  • 我认为值得注意的是,`git pull`会让你保持当前的分支并合并PR更改,而`git fetch/checkout`只会将你切换到PR分支. (12认同)

Eli*_*les 18

你可以这样做:

1)添加上游远程:

git remote add upstream git@github.com:Particular/NServiceBus.git
Run Code Online (Sandbox Code Playgroud)

2)之后,您可以根据其ID检查对新分支的任何拉取请求:

git fetch upstream pull/PULL_REQUEST_ID/head:NEW_BRANCH_NAME
Run Code Online (Sandbox Code Playgroud)

然后你将有一个名为NEW_BRANCH_NAME包含PR代码的分支.

添加别名:

如果你经常这样做,你可能想为它设置一些别名.我在.gitconfig中有这个:

[alias]
    fetch-pr = "!f(){\
        [ -z \"$1\" ] && { echo Usage: git fetch-pr PULL_REQUEST_ID [REMOTE_NAME] [NEW_BRANCH_NAME]; exit 1; }; \
        remote=${2:-origin}; \
        branch=${3:-pr-$1}; \
        git fetch $remote \"pull/$1/head:$branch\"; \
        }; f "
    pr = "!f(){\
        branch=${3:-pr-$1}; \
        git fetch-pr \"$@\"; \
        git switch $branch; \
        }; f "
Run Code Online (Sandbox Code Playgroud)

有了上述,我可以这样做:

git fetch-pr 123              # fetch PR #123 into branch pr-123
git fetch-pr 123 some-branch  # fetch PR #123 into some-branch
git pr 123                    # fetch and switch to the branch
Run Code Online (Sandbox Code Playgroud)

  • 万一有人忘了,还有第三步:git checkout NEW_BRANCH_NAME (4认同)

cat*_*cat 8

对于困难的情况(特别是如果你没有签出git-repo),我认为最简单的方法是应用补丁.为此,只需在github上打开pull-request并在URL中添加".patch",下载并应用补丁.

例:

cd cordova-plugin-media
wget https://github.com/apache/cordova-plugin-media/pull/120.patch
patch -p1 < 120.patch
Run Code Online (Sandbox Code Playgroud)