Git:从拉取请求中删除不需要的提交

53

我开始着手一个项目,不小心提交了一些多余的代码并把它们推到了主分支(origin master)。现在,当我尝试发起一个合并请求时,Github会把所有之前的不必要的提交也包含进去。

我的问题是,我该如何删除不必要的提交,并提交我想要提交的更改,以便与主分支保持同步?


查找“git rebase”。您可以将提交压缩在一起,也可以留下某些提交。 - Abe Petrillo
2个回答

34

我猜你的起点是你自己fork的某个项目,然后想要向该项目发起pull request请求?

由于您将更改历史记录(通过重置head),因此需要使用--force标志进行推送。 使用git log查找您最后一个良好提交的哈希。

现在运行

git reset SHA

这将更改你的头指向该SHA并保留自那个最后好的提交以来文件中的更改,你的索引也将被重置。

现在,您可以更改代码并执行所需的提交。但是,由于更改了存储库的历史记录,您必须执行git push --force。这意味着任何分叉您的存储库的人将无法再从您那里拉取更改。但是您将能够对上游发起拉取请求。


强制推送只有在某人分叉了我的拉取请求所基于的分支时才会成为问题吗?还是只要他们从我的存储库中分叉任何分支都会成为问题?如果他们删除了有问题的分支,他们是否可以再次与我的存储库同步?有没有一种方法可以在不强制推送的情况下干净地从拉取请求中删除提交记录? - endolith
1
只有如果他们基于你的分支进行提交。任何一个后代提交的提交都将受到影响,因为原始提交已不存在,所以无法轻松合并。只要在完成强制推送之前没有人将拉取请求合并或基于其提交,您就可以通过强制推送到您的分支来更改拉取请求。如果您在拉取请求中明确表示正在积极更改它,则不应该发生这种情况。 - Simon Stender Boisen
拉取请求必须处于打开状态,才能使分支更改生效。 - Bartlomiej Lewandowski
只想提一下,这个方法在GitHub上非常有效。以前每次要求更改时,我都会关闭拉取请求,最终创建了更多的分支和拉取请求。采用这种方法,就好像不需要的提交从未存在过一样...而且可以使用相同的分支和拉取请求。 - Nagev

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接