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

pjm*_*rse 80 git github

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

我的问题似乎拉动最新的提交有关,但是当我创建一个新的分支和樱桃选择提交时,我仍然有额外的.我futzed与基础重建为好,但现在看起来,即使我的主人是那么糟糕,我不能生成的原始副本上游.这显然是因为我不明白我需要改变而不是合并,所以显然我犯了错误; 我想要做的是弄清楚如何解开那个结并回到一个干净的状态,我可以有效地前进.

我有点想把我的叉子吹走,然后在上游做一个新的叉子,但我也认为这很困难.

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

Bob*_*ger 98

步骤1:拉动上游更改
建议将上游仓库添加为"上游",如Fork a Repo页面中所述:

git pull --rebase upstream master
Run Code Online (Sandbox Code Playgroud)

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

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

git reset --soft upstream/master
Run Code Online (Sandbox Code Playgroud)

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

git commit -a
Run Code Online (Sandbox Code Playgroud)

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

要显示更改,请使用内置的gitk,Sourcetree,TortoiseGitTower (付费)等GUI .

第4步:推

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

git push -f origin master
Run Code Online (Sandbox Code Playgroud)


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

git remote add upstream git://github.com/[username]/[project].git
Run Code Online (Sandbox Code Playgroud)

您还可以从直接URL中提取:

git pull --rebase  git://github.com/[username]/[project].git
Run Code Online (Sandbox Code Playgroud)

但是,在其他步骤中,您将需要最新上游提交的哈希,而不是"上游/主站".

  • 非常感谢你.GitHub应该更新他们的[Fork A Repo](http://help.github.com/fork-a-repo/). (3认同)