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

我已经分叉了一个存储库,然后我做了一些改变,看起来我已经搞砸了一切。

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

最简单的解决scheme是(使用' 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而在reset --hard ,而在远程侧,由于push --force )。

另一种方法是,如果你想保留你的提交,在当前的upstream/master上重放这些提交。
git rebase upstream/masterreplace复位部分。 您将仍然需要强制推送。
另请参阅“ 如果我处于恶劣的情况下该怎么办?


一个更完整的解决scheme,备份你当前的工作(以防万一)详见“ 清理git master分支并将一些提交移动到新的分支 ”。

另请参阅“将原始GitHub存储库中的新更新分解为分叉的GitHub存储库 ”,以说明“ upstream ”是什么。

上游


注意:最近的GitHub回购确实保护master分支不受push --force
因此,您必须首先解除对master的保护(见下图),然后在推力后重新对其进行保护 。

在这里输入图像说明

爱VonC的答案。 这是初学者的简单版本。

有一个git远程调用origin ,我相信你都知道。 基本上,你可以添加尽可能多的遥控器到你想要的git回购。 所以,我们可以做的是引入一个新的远程,这是原来的回购,而不是叉。 我喜欢称它为original

让我们添加原始的回购作为一个远程我们的叉子。

 git remote add original https://git-repo/original/original.git 

现在让我们取回原始的回购确保我们有最新的编码

 git fetch original 

正如VonC所build议的,确保我们是主人。

 git checkout master 

现在为了使我们的叉子与原来的回购的最新代码速度加快,我们所要做的就是根据原始的遥控器硬重置我们的主分支。

 git reset --hard original/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上打开叉子,在“设置 – >分支 – >默认分支”中select“new_master”作为新的默认分支。 现在你可以强制推动“主”分支:

 git checkout master git push --force origin 

然后,您必须在GitHub设置中将“master”设置为默认分支。 删除“tmp_master”:

 git push origin --delete tmp_master git branch -D tmp_master 

其他警告关于损失你的变化的答案仍然适用,是非常有用的。