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


当前回答

强制更改历史记录

假设您不仅希望删除最后一次提交,而且希望删除最后n次提交中的特定提交,请执行以下操作:

gitrebase-i HEAD~<要返回的提交数>,所以如果您想查看最后五次提交,请使用gitrebase-iHEAD~5。

然后在文本编辑器中,将单词pick更改为放置在要删除的每个提交旁边。保存并退出编辑器。瞧!

附加更改历史记录

尝试git-restore<commit hash>。Revert将创建一个新的提交,以撤消指定的提交。

其他回答

如果您没有发布更改,为了删除最新提交,您可以

$ git reset --hard HEAD^

(注意,这也会删除所有未提交的更改;请小心使用)。

如果您已经发布要删除的提交,请使用git-restore

$ git revert HEAD

如果您已经推送,请首先在HEAD($GIT_commit_HASH_HERE)找到您想要的提交,然后运行以下命令:

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

然后,在复制了回购的每个位置,运行:

git reset --hard origin/master

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

git rebase -i HEAD~N

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

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

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

git reset—软Id提交允许您删除提交,但不删除当前文件。然后使用git push-f源名称分支

如果要删除当前正在进行但不想删除数据的提交-

git reset --soft HEAD~1

如果要删除当前正在进行的提交,并希望删除相关数据-

git reset --hard HEAD~1

PS:这些命令只会删除本地提交。