我需要在NServiceBus存储库中拉入特定的拉取请求(尚未处理到主流中):
https://github.com/johnsimons/NServiceBus/commit/d8524d53094e8181716e771c1023e968132abc15
显然这不是我的仓库,但我需要该请求中存在的更改。
做这个的最好方式是什么?
我需要在NServiceBus存储库中拉入特定的拉取请求(尚未处理到主流中):
https://github.com/johnsimons/NServiceBus/commit/d8524d53094e8181716e771c1023e968132abc15
显然这不是我的仓库,但我需要该请求中存在的更改。
做这个的最好方式是什么?
Answers:
要提取存储库中的内容,请执行以下操作:
git fetch git@github.com:jboss/jboss-common-beans.git refs/pull/4/head
然后使用FETCH_HEAD做任何您想做的事情:
git checkout -b new-branch FETCH_HEAD
fatal: Couldn't find remote ref refs/pull/1041/head
。= /
git@github.com:jboss/jboss-common-beans.git
为remote upstream
,然后执行以下操作:git fetch upstream refs/pull/4/head
你可以这样做:
1)添加上游遥控器:
git remote add upstream git@github.com:Particular/NServiceBus.git
2)之后,您可以根据其ID签出对新分支的任何拉取请求:
git fetch upstream pull/PULL_REQUEST_ID/head:NEW_BRANCH_NAME
然后,您将有一个名为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 "
通过以上操作,我可以做到:
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
请参阅来自GitHub的帮助文章:https : //help.github.com/articles/checking-out-pull-requests-locally
github /集线器
https://github.com/github/hub是GitHub CLI的帮助程序,它使用GitHub API中的额外信息很好地处理了此和其他用例。例如:
git clone https://github.com/github/hub
# Just copy paste the URL.
hub checkout https://github.com/github/hub/pull/970
结果:
我们现在在一个<USERID>-<BRANCH_NAME>
包含PR的分支上。
请注意为我们自动设置的好分支名称。
该分支设置为跟踪叉子上的原始分支,即.git/config
包含:
[branch "<USERID>-<BRANCH_NAME>"]
remote = retronym
merge = refs/heads/ticket/969
rebase = true
因此,如果进一步提交被推动,我们可以git fetch
直接进行处理。
hub
如果您不熟悉Go,但值得的话,在Linux上进行安装目前很麻烦。在Ubuntu 14.04上,存储库上的Go太旧了,因此GVM是最佳选择:
bash < <(curl -LSs 'https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer')
. "$HOME/.gvm/scripts/gvm"
gvm install 'go1.4'
gvm use 'go1.4' --default
go get github.com/github/hub
我还要求GitHub在Web UI上给我们提供复制粘贴速查表,网址为:https : //github.com/isaacs/github/issues/449
refs/heads/ticket/NN
吗?我从来没有看过这个神奇的裁判,pull/NN/head
(这是hub
目前给我的东西)&pull/NN/merge
。只是好奇...
"<USERID>-<BRANCH_NAME>"
,但其分支名称与PR的分支名称相同,没有userid。
一旦您将上游存储库添加为上游远程服务器(如@elias指出):
$ git remote add upstream git@github.com:Particular/NServiceBus
您可以将git配置为默认获取提取请求:
$ git config --local --add remote.upstream.fetch '+refs/pull/*/head:refs/remotes/upstream/pr/*'
因此,让我们获取它:
$ git fetch upstream
Fetching upstream
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/Particular/NServiceBus
* [new ref] refs/pull/1/head -> upstream/pr/1
* [new ref] refs/pull/2/head -> upstream/pr/2
并检查出来:
$ git checkout pr/2
Branch pr/2 set up to track remote branch pr/2 from upstream.
Switched to a new branch 'pr/2'
这是对我有用的命令。
我假设一个人已经在本地将一个仓库(例如pytorch)克隆到他/她的系统中。此后,一些志愿者/发烧友贡献了一些代码并向远程存储库发布了PR,但尚未将其合并到master或任何其他分支中。所以,
首先,我们必须git remote add
对github远程存储库进行操作:
# I've given the name `original`; you can give some other name as per your liking
$ git remote add original https://github.com/pytorch/pytorch
然后cd
进入存储库pytorch
,然后只需执行以下操作:
# after this, the unmerged PR should be pulled to your local repo
$ git fetch original pull/<pull_number>/head # 23, 123 etc.,
现在,待处理的PR已提取到您的本地存储库中,并且提取的提示将在FETCH_HEAD中。如果您想在本地合并该挂起的PR ,则只需执行以下操作:
$ git merge FETCH_HEAD
之后,如果您这样做:
$ git status
您应该能够看到本地仓库n
在作为未决PR的提交之前(即,在一个PR中可以发布1个以上的提交)。因此,提交的数量取决于挂起的PR中包含的提交。
如果您只是想将其他回购中的一个未合并的“拉取请求”添加到自己的请求中,则不需要所有复杂性(如其他答案中大多数所示)。
相反,只需进入自己的仓库,并使用其提交哈希值(从PR源)提取提交即可。
git pull https://bitbucket.org/SomeUser/SomeProjectRepo/commits/c15...db2
这样,您将只有一堆新的编辑文件,就像您自己编辑它们一样。如果要使用某些标签/标签来提交这些内容,则取决于您。
然后,如果您想将所有新闻推送到您自己的GitHub存储库中,请像往常一样执行操作:
git commit -m "Added something by Anonymous"
git push -u origin master
Github有明确的文档将合并请求合并到本地仓库中:
https://help.github.com/en/articles/checking-out-pull-requests-locally
归结为知道GitHub中的拉取请求只是基础存储库中的分支,其中分支名称是序列号。上面的文章向您展示了如何找到该数字以及git命令行魔术师如何使用您想要的任何分支名称将其拉入本地存储库。
我找不到类似的简单方法将合并请求合并到我在GitHub上创建的fork中。
这是来自GitHub文档的解决方案:
从您的项目存储库中,签出一个新分支并测试更改。
git checkout -b GithubUserID-branchName branchName
git pull https://github.com/GithubUserID/reponame.git branchName
哪里:
GithubUserID
是打开请求请求的人的用户名。branchName
是分支的名称,例如masterreponame
仓库名称,如demo-todo范例:
git checkout -b felix123-master master
git pull https://github.com/felix123/demo-todo.git master