Von*_*onC 732
最简单的解决方案是(使用' upstream'作为引用原始repo分叉的远程名称):
git remote add upstream /url/to/original/repo
git fetch upstream
git checkout master
git reset --hard upstream/master
git push origin master --force
Run Code Online (Sandbox Code Playgroud)
(类似于这个GitHub页面,"如果我处境不好,该怎么办?")
请注意,您可能会丢失在master分支上执行的更改(在本地,因为reset --hard和远程端,因为push --force).
如果你想保留你的提交master,另一种方法是在当前重播这些提交upstream/master.
用a替换重置部分git rebase upstream/master.然后你仍然需要强制推动.
另请参阅" 如果情况不好,我该怎么办? "
一个更完整的解决方案,备份您当前的工作(以防万一)在" 清理git master分支并将一些提交移动到新分支 "中详细说明.
另请参阅"将新的更新从原始GitHub存储库拉入分叉的GitHub存储库 "以说明" upstream"是什么.

注:最近GitHub的回购做保障master分支反对push --force.
因此,您必须首先取消保护master(见下图),然后在强制推动后重新保护它.
注意:特别是在GitHub上,现在(2019年2月)有一条快捷方式可以删除已经合并到上游的pull请求的分叉repos.
Ahm*_*ais 31
爱VonC的回答.这是初学者的简单版本.
有一个git遥控器origin,我相信你都知道.基本上,您可以根据需要为git repo添加任意数量的遥控器.所以,我们能做的是引入一个新的遥控器,它是原始的回购而不是前叉.我喜欢称呼它original
让我们将原始回购添加到我们的fork作为远程.
git remote add original https://git-repo/original/original.git
Run Code Online (Sandbox Code Playgroud)
现在让我们获取原始仓库以确保我们拥有最新的编码
git fetch original
Run Code Online (Sandbox Code Playgroud)
正如VonC建议的那样,确保我们是主人.
git checkout master
Run Code Online (Sandbox Code Playgroud)
现在,为了让我们的叉子快速使用原始仓库的最新代码,我们所要做的就是根据原始遥控器硬重置我们的主分支.
git reset --hard original/master
Run Code Online (Sandbox Code Playgroud)
你完成了:)
关注@VonC 很好的答案。您的 GitHub 公司政策可能不允许对 master 进行“强制推送”。
remote: error: GH003: Sorry, force-pushing to master is not allowed.
如果您收到这样的错误消息,请尝试以下步骤。
要有效地重置您的前叉,您需要按照以下步骤操作:
git checkout master
git reset --hard upstream/master
git checkout -b tmp_master
git push origin
Run Code Online (Sandbox Code Playgroud)
在 GitHub 上打开您的分支,在“设置 -> 分支 -> 默认分支”中选择“new_master”作为新的默认分支。现在您可以强制推送“master”分支:
git checkout master
git push --force origin
Run Code Online (Sandbox Code Playgroud)
然后,您必须在 GitHub 设置中将“master”重新设置为默认分支。删除 'tmp_master' :
git push origin --delete tmp_master
git branch -D tmp_master
Run Code Online (Sandbox Code Playgroud)
关于丢失更改的其他警告仍然适用,请小心。
(不是每个人都喜欢通过 git 命令行界面做事)
设置完成后,从那时起您只需要执行步骤 7-13。
获取 > 结帐主分支 > 重置为他们的主分支 > 将更改推送到服务器
双击您的“主”分支以检查它是否尚未检出。
找到您想要重置的提交,如果您将 repo 称为“master”,您很可能希望找到带有“master/master”标签的提交。
右键单击提交>“将当前分支重置为此提交”。
在对话框中,将“使用模式:”字段设置为“硬 - 放弃所有工作副本更改”,然后按“确定”(确保首先将您不想丢失的任何更改放在单独的分支上)。
你完成了!