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


当前回答

将代码备份到临时文件夹。以下命令将重置服务器。

git reset --hard HEAD
git clean -f
git pull

如果要保留更改并删除最近的提交

git reset --soft HEAD^
git pull

其他回答

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

$ git reset --hard HEAD^

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

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

$ git revert HEAD

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

我附上这个答案是因为我不明白为什么任何刚刚尝试提交工作的人都会因为使用Git时出错而想要删除所有工作!

如果您想保留您的工作,只需“撤消”提交命令(在推送到repo之前捕获):

git reset --soft HEAD~1

不要使用--hard标志,除非您希望销毁自上次提交以来正在进行的工作。

假设我们要从回购中删除提交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推送到远程存储库。

如果要修复最近的提交,可以通过以下操作撤消提交并取消其中的文件:

git reset HEAD~1

这将使存储库返回到暂存文件的gitadd命令之前的状态。您的更改将在您的工作目录中。HEAD~1指的是分支当前尖端以下的提交。

如果要取消提交N个提交,但将代码更改保留在工作目录中:

git reset HEAD~N

如果您想摆脱最新的提交,并且不想保留代码更改,可以进行“硬”重置。

git reset --hard HEAD~1

同样,如果您想放弃最后N次提交,并且不想保留代码更改:

git reset --hard HEAD~N