清理叉子并从上游重新启动
我已经分叉了一个存储库,然后我做了一些改变,看起来我已经搞砸了一切。
我希望从头开始,使用当前的上游/主作为我的工作的基础。
我应该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/master
replace复位部分。 您将仍然需要强制推送。
另请参阅“ 如果我处于恶劣的情况下该怎么办?
一个更完整的解决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
其他警告关于损失你的变化的答案仍然适用,是非常有用的。