清理叉子并从上游重新启动它

泄露秘密 提交于 2020-02-29 18:48:09

我已经分叉了一个存储库,然后我做了一些更改,看起来我搞砸了所有东西。

我希望从头开始,使用当前的上游/主人作为我工作的基础。
我应该改装我的存储库还是删除它?


#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>将更改推送到服务器

脚步

  1. 在屏幕顶部的菜单工具栏中:“存储库”>“存储库设置”

  1. “加”

  1. 返回GitHub并复制克隆URL。

  1. 将网址粘贴到“网址/路径”字段中,然后为其指定一个有意义的名称。 我把它称为“主人”。 不要选中“默认远程”复选框 。 您将无法直接推送到此存储库。

  1. 按“确定”,您会看到它现在出现在您的存储库列表中。

  1. 再次按“确定”,您会看到它出现在“遥控器”列表中。

  1. 单击“获取”按钮(源树标题区域的左上角)

  1. 确保选中“从所有遥控器中提取”复选框并按“确定”

  1. 双击“master”分支,检查它是否已经检出。

  2. 找到要重置的提交,如果您调用repo“master”,则很可能希望在其上找到带有“master / master”标记的提交。

  1. 右键单击commit>“将当前分支重置为此提交”。

  2. 在对话框中,将“使用模式:”字段设置为“硬 - 丢弃所有工作副本更改”,然后按“确定”(确保将您不想丢失的任何更改首先放在单独的分支上)。

  1. 单击“推送”按钮(源树标题区域的左上角)将更改上载到您的仓库副本。

你做完了!


#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。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!