2012-01-20 99 views
52

我已经开始在一个项目上工作,并且我提出了一些不必要的提交,这些提交是我推送给原始主机的。现在,当我尝试执行pull请求时,Github想要提交所有以前的提交。Git从合并请求中删除不需要的提交

我的问题是,我如何删除不需要的提交并提交我想提交的更改,以便与主服务器保持最新?

+0

查找“git rebase”。你可以压缩一起提交,并留下一些提交。 –

回答

34

我假设你的来源是你自己想要做拉请求的项目的分叉点?

既然你会改变历史(通过重新设置头),你将需要推--force标志。使用git log找到最后一次良好提交的散列。

现在运行

git reset SHA 

这将你的头更改为SHA和保存文件的变化,因为去年良好的承诺,你的指数也将被重置。

现在您可以更改您的代码并执行您想要的提交。但是,由于您更改了存储库的历史记录,因此您必须执行git push --force。这意味着任何分叉您的存储库的人将无法再从您那里获得更改。但是你可以向上游做拉请求。

+0

如果有人在我的拉动请求所基于的分支上分叉时,强制推动只是一个问题?或者,如果他们从我的存储库中完成任何分支?如果他们删除违规分支,他们可以再次与我的存储库同步?有没有办法在没有强制推送的情况下干净地从拉取请求中移除提交? – endolith

+1

@endolith仅当它们在您的分支上进行提交时才有效。任何后来重新提交的提交后代的提交都将受到影响,因为原始提交不再存在,所以不能进行简单合并。只要没有人合并或基于您的拉动要求承诺,直到您完成的力量推动您的自由更改您的拉动请求,强制推送到您的分支,如果你愿意。如果您在拉取请求中明确说明您正在积极改变它,则不会发生这种情况。 –

+0

拉取请求必须打开才能使分支的更改生效 –

0

如果你使用git gui,转到git gui并想象你的分支历史。 (在执行下一步之前,备份您想要推送的本地更改) 右键单击分支想要重置为主的点,然后单击重置。 重置之后,在命令行中键入git push -f 现在在分支中进行必要的更改,再次提交n。 如果您现在创建一个拉取请求,它将在分支重置后只有新的提交。