我分叉了一个项目,进行了更改,并创建了一个被接受的拉取请求。新的提交后来被添加到存储库中。我怎样才能把这些承诺交给我?


当前回答

遵循以下步骤。我试过了,它帮了我。

签出到您的分支机构

语法:gitbranchyourDevelopmentBranch示例:git checkout master

拉源存储库分支以获取最新代码

语法:git pullhttps://github.com/tastejs/awesome-app-ideas主人示例:git pullhttps://github.com/ORIGINAL_OWNER/ORIGINAL_REPO.git分支名称

其他回答

尝试此操作,单击“获取上游”以从上游主机同步分叉的回购。

遵循以下步骤。我试过了,它帮了我。

签出到您的分支机构

语法:gitbranchyourDevelopmentBranch示例:git checkout master

拉源存储库分支以获取最新代码

语法:git pullhttps://github.com/tastejs/awesome-app-ideas主人示例:git pullhttps://github.com/ORIGINAL_OWNER/ORIGINAL_REPO.git分支名称

从2014年5月开始,可以直接从GitHub更新fork。截至2017年9月,这仍然有效,但这将导致肮脏的犯罪历史。

在GitHub上打开你的分叉。单击拉取请求。单击New Pull Request。默认情况下,GitHub会将原始文件与您的fork进行比较,如果您没有进行任何更改,则不应该有任何可比较的内容。如果看到该链接,请单击切换基础。否则,手动将底叉向下设置到叉上,将头叉设置到上游。现在GitHub将您的分叉与原始分叉进行比较,您应该可以看到所有最新的更改。创建拉取请求并为拉取请求分配一个可预测的名称(例如,从原始请求更新)。向下滚动到Merge pull请求,但不要单击任何内容。

现在您有三个选项,但每个选项都会导致提交历史记录不那么清晰。

默认值将创建难看的合并提交。如果您单击下拉菜单并选择“压缩并合并”,所有中间提交都将被压缩为一个。这通常是你不想要的。如果您单击Rebase并合并,所有提交都将“与”您一起进行,原始PR将链接到您的PR,GitHub将显示This branch is X commits before,Y commits behind<original fork>。

因此,是的,您可以使用GitHub web UI保持回购的上游更新,但这样做会玷污您的提交历史。而是坚持使用命令行-这很简单。

以下是GitHub关于同步分叉的官方文档:

同步分叉设置在同步之前,需要添加指向上游存储库的远程。您可能在最初分叉时就这样做了。提示:同步fork只更新存储库的本地副本;它不会更新GitHub上的存储库。$git远程-v#列出当前遥控器起源https://github.com/user/repo.git(提取)起源https://github.com/user/repo.git(推)$git远程添加上游https://github.com/otheruser/repo.git#设置新遥控器$git远程-v#验证新远程起源https://github.com/user/repo.git(提取)起源https://github.com/user/repo.git(推)上游https://github.com/otheruser/repo.git(提取)上游https://github.com/otheruser/repo.git(推)正在同步将存储库与上游同步需要两个步骤:首先必须从远程获取,然后必须将所需的分支合并到本地分支。正在获取从远程存储库获取将带来其分支及其各自的提交。这些存储在本地存储库中的特殊分支下。$git获取上游#抓住上游遥控器的分支远程:计数对象:75,完成。远程:压缩对象:100%(53/53),完成。远程:总共62个(增量27),重复使用44个(增量9)拆包对象:100%(62/62),完成。从…起https://github.com/otheruser/repo*[新分支]主->上游/主现在,上游的主分支存储在本地分支上游/主分支中$git分支-va#列出所有本地和远程跟踪分支*master a422352我的本地提交remotes/origin/HEAD->origin/masterremotes/origin/master a422352我的本地提交remotes/upstream/master 5fdff0f一些上游提交合并现在我们已经获取了上游存储库,我们希望将其更改合并到本地分支中。这将使该分支与上游同步,而不会丢失本地更改。$git结帐主机#查看我们当地的主分支机构切换到分支“主”$git合并上游/主#将上游的主机合并到我们自己的主机中正在更新a422352..5fdff0f快进自述文件|9-------阅读.md | 7++++++2个文件已更改,7个插入(+),9个删除(-)删除模式100644 README创建模式100644 README.md如果您的本地分支没有任何唯一的提交,git将执行“快进”:$git合并上游/主正在更新34e91da。。16c56天快进阅读.md | 5+++--1个文件已更改,3个插入(+),2个删除(-)提示:如果您想更新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访问所有提交,即使在分叉时它们还不存在。