如何重新同步原始叉子


33

我刚刚在Github分叉了一个项目。我进行了修改并发送了请求请求。所有者将我的叉子与主项目合并,然后进行了一些修改。因此,现在我的fork尚未与主项目一起更新。我错过了他合并我的请求请求后所做的修改。如何使用Main项目更新我的fork?在网络界面中有没有办法做到这一点?

谢谢


我写了一条简单的指令。在这里查看:webapps.stackexchange.com/a/58140/63016
Youngjae 2014年

2
现在有一个做得很好的官方文档:help.github.com/articles/syncing-a-fork
Andre Miras 2014年

Answers:


36

通过设计,对项目进行分叉会创建一个单独的存储库,当原始存储库更改时,该存储库不会更新。但是,这git使得手动更新非常容易。

您需要第三个存储库的帮助(您的本地副本就足够了)。有3个存储库:

  • “上游”:Github上上游项目的存储库。
  • “来源”:Github上您的叉子的存储库
  • “本地”:您计算机上的本地存储库。我将假定您通过使用克隆克隆Fork来创建它git clone git@github.com:your-username/projectname.git,并且每个人都在使用branch master

假设当前“原始”和“本地”处于相同状态,并且“上游”以1次或多次提交(合并和任何后续更改)在前面。

首先将上游项目添加为Git远程

git remote add upstream https://github.com/upstream-username/projectname.git

然后将更改从远程分支(意味着获取并自动合并)从远程master分支转移到本地存储库的当前(master)分支中:

git pull upstream master

现在,您的本地存储库已与同步upstream。最后,将您的本地仓库推送到您的Github分支:

git push origin master

现在一切都同步了。


2
非常感谢..这是一个耻辱,这是不可能的,使在Web界面..
潘基文

1
实际上,这在以下Web界面上是可能的:webapps.stackexchange.com/a/31010/10390
thSoft 2013年

耶eh!我一直在努力寻找这个明确的信息。感谢分享!
pepoluan 2014年

......但也请看看答案的评论,证明了重同步通过网络是不是最好的选择,因为它污染仓库
USR-本地ΕΨΗΕΛΩΝ

拉动后说“已经更新”时您会怎么做,但显然不是?(有些文件我在一个子目录中全部更改过,其他任何文件都应该没有区别,但是我确实有)
robertotomás2015年

1

您需要添加一个遥控器(请参阅GitHub帮助)并从该新遥控器中提取。

git remote add mainProject https://github.com/user/mainProject
git pull mainProject master

0

我发现此答案是对原始答案的补充,因为它仅涉及同步一个分支(主节点)。另外,如果分支是在您的分支之后就在上游创建的,则要在分支上创建分支的过程要多一些。

简短的答案是,要使用上游存储库中的每个分支来更新fork,请执行以下命令。

for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done

这不做的是从您的fork中删除所有已从上游删除的分支。没有办法实现自动化,特别是如果您在fork上创建了分支。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.