Github: 这个分支落后于N个提交

16
我 fork 了另一个 repo 并做了一些更改,都是直接在 GitHub 网站上完成的... 我不需要获取本地副本(它太大了,无法适应我空间有限的 IDE),因此我希望保持所有操作都直接在 GitHub repo 页面上完成(不太可能需要许多更改,如果有的话,它们将是微不足道的,并且可以通过 GitHub 网页轻松完成)。
这些更改已由其他 repo 的所有者合并,因此我们的两个 repo 现在同步。然而,我的 fork 现在显示:
This branch is 4 commits behind OtherOne:master.

我该如何通过GitHub页面修复问题,使我的代码库不再落后于他们的代码库?如果我在我的代码库中进行比较操作,它会显示:

There isn’t anything to compare.
OtherOne:master is up to date with all commits from MyOne:master.  Try switching the base for your comparison.

所以我认为仓库现在已经完全同步了...但我只是想删除那个“滞后”的消息(因为我就是这样)。有没有办法?我可以删除我的仓库并重新fork...但那似乎不太优雅。

将来,如果其他仓库更新了,我如何将这些更改拉入我的仓库...再次...全部在Github上进行,而不是通过CLI。


GitHub网站不是为此而设计的。您需要在本地进行更改,然后将其推送回GitHub。---另外,您的IDE与Git有什么关系? - evolutionxbox
1
你的IDE跟git有什么关系?只是我的IDE空间不足,无法克隆500MB的代码库,仅仅为了改一行代码并将其推送回去。在github上直接修改似乎更高效。 - drmrbrewer
如果您不使用IDE进行更改怎么办?您甚至可以进行浅克隆。 - evolutionxbox
不使用IDE...那要怎么做呢?为此部署一个(临时或更长期的)云服务器?我正是想避免这种额外的麻烦和成本,直接在github上进行编辑...这个仓库并非持续开发,只需要偶尔进行微调即可。而浅层克隆也无法帮助...即使深度为1也太大了...这个仓库中有一些非常大的数据文件。 - drmrbrewer
我的意思是,为什么不将repo克隆到您的本地计算机上,不使用IDE或云服务器,然后在那里进行更改呢? - evolutionxbox
3个回答

26

不要试着使用GitHub网站(虽然有可能,但这是个坏主意)。相反,请使用“干净”的方法,在您的git仓库目录中执行以下操作:

  1. 告诉您的仓库关于原始仓库的信息:

    git remote add upstream git://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git

  2. 获取原始分支: git fetch upstream

  3. 将原始数据合并到您的分支: git pull upstream master

  4. 将结果推送到您的GitHub仓库: git push


4
@drmrbrewer,这应该被选为正确答案。 - Dark Templar
1
@DarkTemplar,OP明确写道“(纯粹通过github页面)”。;) - Andreas
从上面的答案可以看出这是可能的。请解释一下为什么您认为这是一个不好的想法。 - Frank Breitling
它对我来说完美地运行了。谢谢。 - djangodeveloper

10
更新:现在您可以通过GitHub前端的“Fetch Upstream”按钮执行此操作 - 在此处查看发布说明

现在您可以使用Web UI将过时的fork分支与其upstream分支同步。如果分支之间没有合并冲突,则通过快进或从upstream分支合并来更新fork分支。如果存在冲突,您将被提示打开拉取请求以解决。

GitHub Fetch Upstream functionality

旧回答:

创建一个拉取请求,将OtherOne:master合并到您的分叉仓库中,然后合并它。这应该会删除消息,并确保两个仓库确实同步。


14
谢谢...有人真的尝试帮忙,而不仅是贬低和批评我的方法。具体步骤如下:我进入了我的代码库,点击“新建拉取请求”(New Pull Request),(界面显示没有比较内容),点击“切换基础”,将比较结果反转,使我的代码库在左侧,上游代码库在右侧(箭头指向我的代码库),此时页面会显示“可以合并。这些分支可以自动合并”,然后点击“创建拉取请求”(Create Pull Request),输入标题,再次点击“创建拉取请求”,最后点击“合并拉取请求”(Merge Pull Request)和“确认”即可完成。 - drmrbrewer
@drmrbrewer 有趣... 我也没有这样做。 - evolutionxbox
@evolutionxbox 嗯,但“Github网站不是为此而设计的”...实际上似乎它确实是为此而设计的,我通过Github网站完成我需要的所有事情的方法是有效的...我只需要一点关于使用拉取请求(在网站上可用)的指导。 - drmrbrewer
2
进一步说明:即使“切换基础”没有显示,您也可以通过手动编辑地址栏中的URL来切换它们。或者将左侧下拉菜单更改为您自己的存储库(然后它会说“没有任何要比较的内容”),然后选择“跨存储库进行比较”,然后从右侧下拉菜单中选择另一个存储库...这将把您的存储库放在左侧,另一个存储库放在右侧。 - drmrbrewer
太好了!它起作用了,但现在它说 This branch is 1 commit ahead of dan-giddins:master. 并且比较显示原因为Merge pull request #1 from dan-giddins/master. 看起来像是无限循环,其中分叉永远不会变得均匀... 我能做什么? - Frank Breitling

0
如果分支不是主分支,请提供另一种方法: (特别是如果你只克隆了一个分支的代码库到本地使用 :)
git clone -b branch-name git://github.com/YOUR_FORK_REPOSITORY.git

)

使用git命令
git checkout -b upstream-branch-name branch-name
git pull git://github.com/ORIGINAL_REPOSITORY.git upstream-branch-name
git checkout branch-name
git merge --no-ff upstream-branch-name
git push

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接