我分叉了一个项目,进行了更改,并创建了一个被接受的拉取请求。新的提交后来被添加到存储库中。我怎样才能把这些承诺交给我?
当前回答
截至本答复之日,GitHub在web界面中还没有(或者我应该说不再有?)这一功能。然而,你可以问support@github.com加上你的一票。
与此同时,GitHub用户bardiharborow创建了一个工具来实现这一点:https://upriver.github.io/
来源在这里:https://github.com/upriver/upriver.github.io
其他回答
我用这一行更新我的分叉回购:
git pull https://github.com/forkuser/forkedrepo.git branch
如果您不想在项目中添加另一个远程端点,请使用此选项,如其他解决方案所示。
有三种方法可以做到这一点:从web UI(选项1)、从GitHub CLI(选项2)或从命令行(选项3)。
选项1-Web UI
在GitHub上,导航到要与上游存储库同步的分叉存储库的主页面。选择“获取上游”下拉列表。
查看上游存储库中有关提交的详细信息,然后单击“获取并合并”。
选项2-GitHub CLI
要从父级更新远程分叉,请使用gh repo sync子命令并提供分叉名称作为参数。
$ gh repo sync owner/cli-fork
如果来自上游存储库的更改导致冲突,则GitHub CLI无法同步。您可以设置-force标志来覆盖目标分支。
如何安装GitHub CLIGitHub CLI手册
选项3-命令行
在将分叉与上游存储库同步之前,必须在Git中配置指向上游存储库的远程。
1打开Git Bash。
2将当前工作目录更改为本地项目。
3从上游存储库获取分支及其各自的提交。对BRANCHNAME的提交将存储在本地分支上游/BRANCHNAME中。
$ git fetch upstream
> remote: Counting objects: 75, done.
> remote: Compressing objects: 100% (53/53), done.
> remote: Total 62 (delta 27), reused 44 (delta 9)
> Unpacking objects: 100% (62/62), done.
> From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY
> * [new branch] main -> upstream/main
4查看fork的本地默认分支-在本例中,我们使用main。
$ git checkout main
> Switched to branch 'main'
5将来自上游默认分支(在本例中为upstream/main)的更改合并到本地默认分支中。这将使fork的默认分支与上游存储库同步,而不会丢失本地更改。
$ git merge upstream/main
> Updating a422352..5fdff0f
> Fast-forward
> README | 9 -------
> README.md | 7 ++++++
> 2 files changed, 7 insertions(+), 9 deletions(-)
> delete mode 100644 README
> create mode 100644 README.md
如果一个人的本地分支没有任何唯一的提交,Git将执行“快进”:
$ git merge upstream/main
> Updating 34e91da..16c56ad
> Fast-forward
> README.md | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
注意:同步一个人的分叉只会更新回购的本地副本。要更新GitHub.com上的分叉,必须推送更改。
来源:GitHub Docs-同步分叉
作为对这个答案的补充,我正在寻找一种方法,从上游分支一次性更新我的克隆回购(原始)的所有远程分支。我就是这样做的。
这假设您已经配置了一个指向源存储库(源是从那里分叉的)的上游远程,并将其与git fetch upstream同步。
然后运行:
for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done
该命令的第一部分列出了上游远程回购中的所有头,并删除了后跟refs/heads/分支名称前缀的SHA-1。
然后,对于这些分支中的每一个,它将上游远程跟踪分支的本地副本(本地侧的refs/remotes/upstream/<branch>)直接推送到源上的远程分支(远程侧的refs/头/<branch>)。
这些分支同步命令中的任何一个都可能由于以下两个原因而失败:上游分支已被重写,或者您已将该分支上的提交推送到您的分叉。在第一种情况下,如果您没有向分叉上的分支提交任何内容,则可以安全地强制推送(在上面的命令中添加-f开关;即git push-f)。在另一种情况下,这是正常的,因为您的fork分支已经分叉,在提交被合并回上游之前,您不能期望sync命令工作。
遵循以下步骤。我试过了,它帮了我。
签出到您的分支机构
语法:gitbranchyourDevelopmentBranch示例:git checkout master
拉源存储库分支以获取最新代码
语法:git pullhttps://github.com/tastejs/awesome-app-ideas主人示例:git pullhttps://github.com/ORIGINAL_OWNER/ORIGINAL_REPO.git分支名称
实际上,可以从浏览器中上游的任何提交在fork中创建分支:
打开https://github.com/<repo>/commits/<hash>,其中repo是您的分叉,hash是提交的完整哈希,您可以在上游web界面中找到。例如,我可以打开https://github.com/max630/linux/commits/0aa0313f9d576affd7747cc3f179feb097d28990,这将linux master作为编写时间。单击“树:……”按钮。键入新分支的名称,然后按Enter键
然后,您可以将该分支提取到本地克隆,当您在提交的基础上进行编辑时,您不必将所有数据推回到GitHub。或者使用web界面更改该分支中的某些内容。
它是如何工作的(这是一个猜测,我不知道GitHub是如何做到的):forks共享对象存储,并使用命名空间来分隔用户的引用。因此,您可以通过fork访问所有提交,即使在分叉时它们还不存在。
推荐文章
- 在Markdown Jekyll中使用图像说明
- 如何将git配置存储为存储库的一部分?
- 如何修改GitHub拉请求?
- 如何在Github和本地删除最后n次提交?
- 我如何调试git/git-shell相关的问题?
- 错误:无法使用rebase进行拉取:您有未分阶段的更改
- Git隐藏未缓存:如何把所有未分期的变化?
- 如何将文件附加到GitHub问题?
- 真实的恶魔
- 如何从另一个分支获得更改
- Git:权限被拒绝(publickey)致命-无法从远程存储库读取。克隆Git存储库时
- git reflog和log有什么区别?
- git推挂在Total line之后
- 重命名git子模块
- 如何添加谷歌分析跟踪ID到GitHub页面