我分叉了一个项目,进行了更改,并创建了一个被接受的拉取请求。新的提交后来被添加到存储库中。我怎样才能把这些承诺交给我?
当前回答
如果您使用的是Windows或Mac的GitHub,那么现在他们有一个一键更新fork的功能:
在UI中选择存储库。单击顶部的“从用户/分支更新”按钮。
其他回答
$ git remote add upstream https://github.com/....
$ git pull upstream main
$ git push
GitHub现在引入了一个功能,可以通过单击按钮同步分叉。
转到您的分叉,单击“上游获取”,然后单击“获取并合并”以直接将分叉与其父回购同步。
您也可以单击“比较”按钮在合并之前比较更改。
参考:GitHub的文档
实际上,可以从浏览器中上游的任何提交在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访问所有提交,即使在分叉时它们还不存在。
在分叉存储库的本地克隆中,可以将原始GitHub存储库添加为“远程”。(“Remotes”就像是存储库URL的昵称,例如,origin就是其中之一。)然后,您可以从上游存储库中获取所有分支,并重新设置工作基础,继续使用上游版本。就命令而言,可能如下所示:
# Add the remote, call it "upstream":
git remote add upstream https://github.com/whoever/whatever.git
# Fetch all the branches of that remote into remote-tracking branches
git fetch upstream
# Make sure that you're on your master branch:
git checkout master
# Rewrite your master branch so that any commits of yours that
# aren't already in upstream/master are replayed on top of that
# other branch:
git rebase upstream/master
如果您不想重写主分支的历史记录(例如,因为其他人可能已经克隆了它),那么应该用gitmergeupstream/master替换最后一个命令。然而,为了做出尽可能干净的进一步拉取请求,可能最好重新设置基址。
如果您已经将分支重新基于upstream/master,则可能需要强制推送,以便将其推送到GitHub上自己的分叉存储库。你可以这样做:
git push -f origin master
您只需要在重新启动后第一次使用-f即可。
rm -rf oldrepository
git clone ...
可能有更微妙的选项,但这是我唯一有信心的方法,我的本地存储库与上游存储库相同。
推荐文章
- 在Markdown Jekyll中使用图像说明
- 如何将git配置存储为存储库的一部分?
- 如何修改GitHub拉请求?
- 如何在Github和本地删除最后n次提交?
- 我如何调试git/git-shell相关的问题?
- 错误:无法使用rebase进行拉取:您有未分阶段的更改
- Git隐藏未缓存:如何把所有未分期的变化?
- 如何将文件附加到GitHub问题?
- 真实的恶魔
- 如何从另一个分支获得更改
- Git:权限被拒绝(publickey)致命-无法从远程存储库读取。克隆Git存储库时
- git reflog和log有什么区别?
- git推挂在Total line之后
- 重命名git子模块
- 如何添加谷歌分析跟踪ID到GitHub页面