我在Github上分叉了一个存储库。我做了一些小的改动并向上游提交了拉取请求,但是在我的分叉已经变得如此糟糕的情况下,我无法生成干净的拉取请求;当我从一个分支机构开始一个有六个更改的拉取请求时,Github想要提交十三个,其中七个已经存在于上游(natch)。
我的问题似乎与only pulling the latest commits有关,但是当我创建一个新的分支和樱桃选择提交时,我仍然有额外的东西。我也使用rebasing,但现在看起来甚至my master如此混乱我无法生成upstream的干净副本。这显然是因为我不明白我需要rebase instead of merging,所以显然我犯了错误;我想要做的是弄清楚如何解开那个结并回到一个干净的状态,我可以有效地前进。
我有点想把我的叉子吹走,然后在上游做一个新的叉子,但我也觉得很困难。
承认我的Git罪,我如何获得github赦免?
答案 0 :(得分:98)
第1步:拉动上游变更
建议将上游仓库添加为“上游”,如Fork a Repo页面上所述:
git pull --rebase upstream master
--rebase
选项将您的更改置于最新提交之上而不进行合并。
第2步:(可选)将您的提交合并为1次提交
git reset --soft upstream/master
此命令将“撤消”所有提交,但不会更改文件。因此,您可以在一次提交中提交所有更改。
git commit -a
第3步:检查&测试您的更改
要显示更改,请使用内置gitk
,Sourcetree,TortoiseGit或Tower (付费)等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回购。
如果您需要确切的命令,请告诉我。另请告诉我您是否要尝试保留本地提交,或者“吹走”是否正常。