如何从分支历史记录中删除提交?我应该使用git reset-hard HEAD吗?


当前回答

假设您尚未推送到远程存储库,则可以重新克隆存储库。这是我几次选择的方法。

其他回答

如果您还没有将提交推到任何位置,可以使用gitrebase-i删除该提交。首先,找出提交的时间(大约)有多远。然后执行以下操作:

git rebase -i HEAD~N

~N表示对最后N个提交进行重新基化(N必须是一个数字,例如HEAD~10)。然后,您可以编辑Git提供给您的文件,以删除违规提交。保存该文件后,Git将重写以下所有提交,就像您删除的提交不存在一样。

GitBook中有一个很好的部分,用图片和示例来改变基础。

但是要小心,因为如果你改变了你在其他地方推动的东西,除非你计划进行强制推动,否则需要另一种方法。

删除整个提交

git rebase -p --onto SHA^ SHA

显然,用您想要删除的引用替换“SHA”。该命令中的“^”是文字。

http://sethrobertson.github.io/GitFixUm/fixup.html#change_deep

git重置--硬

git推原点HEAD—力

如果一个或多个提交被标记,请首先删除标记。否则,标记的提交不会被删除。

假设我们要从回购中删除提交2和4。(数字越高,提交越新;0是最早的提交,4是最新的提交)

commit 0 : b3d92c5
commit 1 : 2c6a45b
commit 2 : <any_hash>
commit 3 : 77b9b82
commit 4 : <any_hash>

注意:您需要对回购拥有管理权限,因为您使用的是--hard和-f。

gitcheckout b3d92c5签出最后一个可用的提交。gitcheckout-b repair创建一个新的分支来处理。git cherry pick 77b9b82运行提交3。git cherry pick 2c6a45b运行提交1。git checkout master checkout master。git reset--hard b3d92c5将主机重置为上次可用提交。gitmerge修复将我们的新分支合并到master上。git push-f origin master将master推送到远程存储库。

我已经推了。需要远程返回一些提交。尝试了许多变化,但只有Justin via git bush的这句话对我来说很好:

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force