我如何清理我的Github分叉,这样我可以做出干净的拉取请求?

我在Github上分发了一个仓库。 我已经做了一些小的改动,并向上游提交了pull请求,但是一路上我的fork已经变得如此受到破坏,我无法生成干净的pull请求; 当我从一个有6个变化的分支开始请求时,Github想要提交13个,其中有7个已经存在在上游(natch)。

我的问题似乎只涉及到拉最新的提交 ,但是当我创build一个新的分支和樱桃挑选提交我还有额外的。 我已经与rebasing,以及现在看来,即使我的主人是如此搞砸了,我不能生成一个干净的上游副本。 这显然是因为我不明白,我需要改变而不是合并 ,很明显我犯了错误; 我想要做的是弄清楚如何解开这个结,回到一个干净的状态,我可以有效地前进。

我有点想把我的叉子吹走,做出一个新的上游叉子,但是我也收集起来很困难。

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

第1步:拉上游变更
build议将上游回购添加为“上游”,如“回购回购”页面中所述:

git pull --rebase upstream master 

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

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

 git reset --soft upstream/master 

这个命令将“撤消”所有的提交,但不会改变文件。 所以你可以在一个提交中提交所有的更改。

 git commit -a 

第3步:检查并testing您的更改

 gitk 

对于Mac OS X,您也可以使用gitx 。
而对于Windows,你也可以使用TortoiseGit的“显示日志”。

第4步:推

git push会抛出一个错误,因为这个push会改变目标版本库的历史logging。 如果您确信步骤3中显示的更改是正确的,请使用“-f”

 git push -f origin master 

附加信息
添加远程的命令是:

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

你也可以从一个直接的URL拉:

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

但是,在其他步骤中,您将需要最新上游提交的散列,而不是“上游/主”。

据我了解,Git和Mercurial(我只用后者,所以我可能是错的),吹掉叉子并重新分叉并不是什么大不了的事情。 我一直在做我的项目。 如果你可以这样做(可以备份你的修改,或者没有任何重大的改变),我想说这可能是一条可行的路。

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

在您的私人回购中,将forkee的回购添加为远程回购。 重新设置/重置您的分支从远程的分支机构。 做一个力量推到你的github回购。

如果你需要确切的命令,让我知道。 也让我知道你是否想尝试保存本地提交或者“吹走”是否可以。