我已将GitHub上的活动开源项目分配到我的帐户。然后我将GH repo克隆到我的本地机器上。我定期提取上游主分支以保持本地副本同步。
我对目前正在审核和更改的上游回购中的重要新功能的拉取请求感兴趣。我想将pull请求复制到本地计算机,以便我可以查看和分析此代码。我不会对这项工作提出任何修改。
我使用此命令和结果获取了pull请求:
$ git fetch upstream pull/5737/head:pr-5737
remote: Counting objects: 4, done.
remote: Total 4 (delta 3), reused 3 (delta 3), pack-reused 1
Unpacking objects: 100% (4/4), done.
From https://github.com/OrigProj/repo-name
* [new ref] refs/pull/5737/head -> pr-5737
结果是一个名为'pr-5737'的新分支用于拉取请求。项目开发人员现在已经对pull请求进行了额外的提交,因为他们正在处理它。我可以使用以下命令将pull请求的新提交下载到我的本地计算机:
$ git checkout pr-5737
Switched to branch 'pr-5737'
$ git fetch upstream pull/5737/head
remote: Counting objects: 4, done.
remote: Total 4 (delta 3), reused 3 (delta 3), pack-reused 1
Unpacking objects: 100% (4/4), done.
From https://github.com/OrigProj/repo-name
* branch refs/pull/5737/head -> FETCH_HEAD
我无法弄清楚将这些新获取的提交“合并”到拉请求分支的头部的命令。我不想将pull请求合并到master分支中。我想保持单独的分支,pr-5737,更新。我用什么命令?
我知道我可以删除拉请求分支,pr-5737,然后重新获取它,但这似乎不是“正确”的做法。
Cherry-Picking来自torek的优秀解释/答案。并根据我目前的做法采取简单的方法。我能够从上游向pull请求分支添加新的提交,pr-5737。
我使用了这些命令:
$ git checkout master
$ git branch -f pr-5737 FETCH_HEAD
然后我将所有内容都推送到上游项目的GitHub分支。主要是出于备份的原因。你还会看到我已经添加了我想要的其他两个pull-request分支。
$ git push -v --all origin
Pushing to git@github.com:username/fork-project.git
Enter passphrase for key '/home/acct-name/.ssh/id_ecdsa':
Counting objects: 68, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (68/68), done.
Writing objects: 100% (68/68), 11.38 KiB | 0 bytes/s, done.
Total 68 (delta 50), reused 0 (delta 0)
remote: Resolving deltas: 100% (50/50), completed with 21 local objects.
To git@github.com:username/fork-project.git
= [up to date] pr-5717 -> pr-5717
ec0b073..67486dc master -> master
212c54a..e935946 pr-5737 -> pr-5737
* [new branch] pr-5763 -> pr-5763
updating local tracking ref 'refs/remotes/origin/master'
updating local tracking ref 'refs/remotes/origin/pr-5717'
updating local tracking ref 'refs/remotes/origin/pr-5737'
updating local tracking ref 'refs/remotes/origin/pr-5763'
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean