如何清理我的Github fork,以便我可以提出干净的拉取请求?

时间:2011-05-23 19:57:33

标签: git github

我在Github上分叉了一个存储库。我做了一些小的改动并向上游提交了拉取请求,但是在我的分叉已经变得如此糟糕的情况下,我无法生成干净的拉取请求;当我从一个分支机构开始一个有六个更改的拉取请求时,Github想要提交十三个,其中七个已经存在于上游(natch)。

我的问题似乎与only pulling the latest commits有关,但是当我创建一个新的分支和樱桃选择提交时,我仍然有额外的东西。我也使用rebasing,但现在看起来甚至my master如此混乱我无法生成upstream的干净副本。这显然是因为我不明白我需要rebase instead of merging,所以显然我犯了错误;我想要做的是弄清楚如何解开那个结并回到一个干净的状态,我可以有效地前进。

我有点想把我的叉子吹走,然后在上游做一个新的叉子,但我也觉得很困难。

承认我的Git罪,我如何获得github赦免?

3 个答案:

答案 0 :(得分:98)

第1步:拉动上游变更
建议将上游仓库添加为“上游”,如Fork a Repo页面上所述:

git pull --rebase upstream master

--rebase选项将您的更改置于最新提交之上而不进行合并。

第2步:(可选)将您的提交合并为1次提交

git reset --soft upstream/master

此命令将“撤消”所有提交,但不会更改文件。因此,您可以在一次提交中提交所有更改。

git commit -a

第3步:检查&测试您的更改

要显示更改,请使用内置gitkSourcetreeTortoiseGitTower (付费)等GUI

第4步:按

git push会抛出错误,因为推送会改变目标存储库的历史记录 如果您确信步骤3中显示的更改是正确的,请按“-f”

git push -f origin master


其他信息
添加遥控器的命令是:

git remote add upstream git://github.com/[username]/[project].git

您还可以从直接网址中提取:

git pull --rebase  git://github.com/[username]/[project].git

但是在其他步骤中你需要最新上游提交的哈希值而不是“upstream / master”。

答案 1 :(得分:4)

据我了解,同时使用Git和Mercurial(我只使用后者,所以我可能错了)吹掉一个分叉并重新分叉它并不是什么大不了的事。我一直在做我的项目。如果您可以这样做(可以备份您的更改,或者您的分支没有任何重大更改),我会说这可能是要走的路。

请记住,使用DVCS,分支存储库可以完全克隆整个存储库。如果你删除当前的fork然后再次分叉原始仓库,你将有一个完全干净的平台可供使用。

答案 2 :(得分:0)

在您的私人仓库中,将forkee的仓库添加为远程仓库。从远程分支重新启动/重置分支。强行推进你的github回购。

如果您需要确切的命令,请告诉我。另请告诉我您是否要尝试保留本地提交,或者“吹走”是否正常。

相关问题