我分叉了一个存储库,然后进行了一些更改,看来我已经弄乱了所有东西。
我希望以当前的上游/母版作为我的工作基础,从头开始。
我应该重新配置存储库还是将其删除?
我分叉了一个存储库,然后进行了一些更改,看来我已经弄乱了所有东西。
我希望以当前的上游/母版作为我的工作基础,从头开始。
我应该重新配置存储库还是将其删除?
Answers:
最简单的解决方案是(使用' upstream'作为引用原始存储库的远程名称):
git remote add upstream /url/to/original/repo
git fetch upstream
git checkout master
git reset --hard upstream/master
git push origin master --force
(类似于此GitHub页面,“如果我处境不好,应该怎么办?”一节)
请注意,您可能会丢失master分支上所做的更改(由于是reset --hard,在本地,而由于,则在远程push --force)。
如果您要保留提交,则可以选择一种方法,master即在current之上重播这些提交upstream/master。
用替换复位部分git rebase upstream/master。然后,您仍然需要强行推动。
另请参阅“ 如果我处境不好,应该怎么办? ”
“ 清理git master分支并将一些提交移动到新分支 ”中详细介绍了一种更完整的解决方案,用于备份当前的工作(以防万一)。
另请参阅“将新的更新从原始GitHub存储库中提取到派生的GitHub存储库中 ”以说明“ upstream”是什么。

注意:最近的GitHub仓库确实保护master分支免受攻击push --force。
因此,您必须先取消保护master(请参见下图),然后在强行推动后重新保护它)。
注意:特别是在GitHub上,现在(2019年2月)有一个快捷方式可以删除已合并到上游的请求请求的分叉存储库。
git reset --hard upstream/master
git reset了答案中的语法。
喜欢VonC的答案。这是初学者的简单版本。
origin我相信大家都知道有一个git remote 。基本上,您可以根据需要向git repo添加任意数量的远程对象。因此,我们可以做的是引入一个新的遥控器,它是原始的仓库而不是叉子。我喜欢称呼它original
让我们将原始仓库添加到我们的分叉中作为遥控器。
git remote add original https://git-repo/original/original.git
现在,让我们获取原始存储库,以确保我们拥有最新的编码
git fetch original
正如VonC建议的那样,请确保我们已掌握。
git checkout master
现在,要使我们的分支与原始存储库上的最新代码同步起来,我们要做的就是按照原始遥控器硬重置主分支。
git reset --hard original/master
你完成了:)
fatal: ambiguous argument 'original/master': unknown revision or path not in the working tree.最后一步。有什么建议吗?
original比upstream(Github文档使用的)更好,就像origin/master本地的“上游”一样master。减少歧义。不知道这是为什么要使用它?
以下@VonC很好的答案。您的GitHub公司政策可能不允许在主服务器上进行“强制推送”。
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
在GitHub上打开fork,在“设置->分支->默认分支”中选择'new_master'作为新的默认分支。现在,您可以强制按下“ master”分支:
git checkout master
git push --force origin
然后,您必须在GitHub设置中将'master'设置回默认分支。要删除“ tmp_master”:
git push origin --delete tmp_master
git branch -D tmp_master
警告有关丢失更改的其他答案仍然适用,请小心。
(并非每个人都喜欢通过git命令行界面执行操作)
设置完成后,您仅需从此开始执行步骤7-13。
获取>检出master分支>重置为其主master>将更改推送到服务器
双击您的“ master”分支,以检查是否尚未签出。
找到您要重置为的提交,如果您将存储库称为“ master”,则很可能希望找到带有“ master / master”标签的提交。
右键单击提交>“将当前分支重置为此提交”。
在对话框中,将“使用模式:”字段设置为“硬-放弃所有工作副本更改”,然后按“确定”(确保首先将不希望丢失的所有更改放到单独的分支上)。
完成了!