我刚刚在 Github 上 fork 了一个项目。我做了修改并发送了一个 pull request。所有者将我的 fork 与主项目合并,之后做了一些修改。所以现在我的 fork 还没有随主项目更新。我错过了他合并我的 pull request 后所做的修改。我该如何更新我的 fork 与主项目?有没有办法在 Web 界面上做到这一点?
谢谢
答案1
根据设计,分叉项目会创建一个单独的存储库,当原始存储库更改时,该存储库不会更新。但是,git
手动更新非常容易。
您需要第三个存储库的帮助(您的本地副本就足够了)。共有 3 个存储库:
- “上游”:Github 上的上游项目存储库。
- “Origin”:你在 Github 上的 fork 仓库
- “本地”:您计算机上的本地存储库。我假设您通过使用 克隆 Fork 来创建它,并且每个人都在使用 分支。
git clone [email protected]:your-username/projectname.git
master
假设当前“Origin”和“Local”处于相同状态,并且“Upstream”领先 1 次或多次提交(合并和任何后续更改)。
首先将上游项目添加为Git 远程:
git remote add upstream https://github.com/upstream-username/projectname.git
然后拉(意思是拿来进而合并自动将远程master
分支中的更改复制到本地存储库的当前(master
)分支中:
git pull upstream master
现在你的本地仓库已经与 同步了upstream
。最后,将你的本地仓库推送到你的 Github fork 上:
git push origin master
现在一切都同步了。
答案2
您需要添加一个遥控器(参见GitHub 帮助),然后从新的遥控器中拉出。
git remote add mainProject https://github.com/user/mainProject
git pull mainProject master
答案3
我发现这个答案补充原始答案,因为该答案仅涉及同步一个分支(主分支)。此外,如果自从您的 fork 以来,该分支已在上游创建,则在您的 fork 上创建它会更加复杂一些。
简短的回答是,要使用上游存储库中的每个分支更新您的 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
这不会移除已从上游删除的分支。没有办法自动执行此操作,尤其是如果您已在分支上创建分支。