我已经分叉了一个存储库,然后我做了一些更改,看起来我搞砸了所有东西。
我希望从头开始,使用当前的上游/主人作为我工作的基础。
我应该改装我的存储库还是删除它?
#1楼
爱VonC的回答。 这是初学者的简单版本。
有一个git遥控器叫做origin
,我相信你们都知道。 基本上,您可以根据需要为git repo添加任意数量的遥控器。 所以,我们能做的是引入一个新的遥控器,它是原始的回购而不是前叉。 我喜欢称之为original
让我们将原始回购添加到我们的fork作为远程。
git remote add original https://git-repo/original/original.git
现在让我们获取原始仓库以确保我们拥有最新的编码
git fetch original
正如VonC建议的那样,确保我们是主人。
git checkout master
现在,为了让我们的叉子快速使用原始仓库的最新代码,我们所要做的就是根据原始遥控器硬重置我们的主分支。
git reset --hard original/master
你完成了:)
#2楼
关注@VonC很棒的答案。 您的GitHub公司政策可能不允许对主人进行“强制推送”。
remote: error: GH003: Sorry, force-pushing to master is not allowed.
如果您收到类似这样的错误消息,请尝试以下步骤。
要有效地重置fork,您需要按照以下步骤操作:
git checkout master
git reset --hard upstream/master
git checkout -b tmp_master
git push origin
在GitHub上打开你的分支,在“设置 - >分支 - >默认分支”中选择“new_master”作为新的默认分支。 现在你可以强制推送'master'分支:
git checkout master
git push --force origin
然后,您必须将'master'设置为GitHub设置中的默认分支。 要删除'tmp_master':
git push origin --delete tmp_master
git branch -D tmp_master
关于失去你的改变的其他答案仍然适用,是好的。
#3楼
如何通过Sourcetree GUI 100%完成
(不是每个人都喜欢通过git命令行界面做事)
设置完成后,您只需要执行步骤7-13。
Fetch> checkout master branch> reset to master>将更改推送到服务器
脚步
- 在屏幕顶部的菜单工具栏中:“存储库”>“存储库设置”
- “加”
- 返回GitHub并复制克隆URL。
- 将网址粘贴到“网址/路径”字段中,然后为其指定一个有意义的名称。 我把它称为“主人”。 不要选中“默认远程”复选框 。 您将无法直接推送到此存储库。
- 按“确定”,您会看到它现在出现在您的存储库列表中。
- 再次按“确定”,您会看到它出现在“遥控器”列表中。
- 单击“获取”按钮(源树标题区域的左上角)
- 确保选中“从所有遥控器中提取”复选框并按“确定”
双击“master”分支,检查它是否已经检出。
找到要重置的提交,如果您调用repo“master”,则很可能希望在其上找到带有“master / master”标记的提交。
右键单击commit>“将当前分支重置为此提交”。
在对话框中,将“使用模式:”字段设置为“硬 - 丢弃所有工作副本更改”,然后按“确定”(确保将您不想丢失的任何更改首先放在单独的分支上)。
- 单击“推送”按钮(源树标题区域的左上角)将更改上载到您的仓库副本。
你做完了!
#4楼
最简单的解决方案是(使用' 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
(类似于这个GitHub页面,“如果我处境不好,该怎么办?” )
请注意,您可能会丢失在master
分支上执行的更改 (在本地,因为reset --hard
,而在远程端,因为push --force
)。
如果您希望保留对master
的提交,则可以选择在当前upstream/master
之上重放这些提交。
用git rebase upstream/master
替换重置部分。 然后你仍然需要强制推动。
另请参阅“ 如果情况不好,我该怎么办? ”
一个更完整的解决方案,备份您当前的工作(以防万一)在“ 清理git master分支并将一些提交移动到新分支 ”中详细说明。
另请参阅“将新的更新从原始GitHub存储库拉入分叉的GitHub存储库 ”,以说明“ upstream
”是什么。
注意:最近的GitHub repos确实保护master
分支不受push --force
。
因此,您必须首先取消保护master
(见下图),然后在强制推动后重新保护它 。
注意:特别是在GitHub上, 现在(2019年2月)有一条快捷方式可以删除已经合并到上游的pull请求的分叉repos。
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3179561