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


当前回答

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

git reset HEAD~1

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

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

git reset HEAD~N

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

git reset --hard HEAD~1

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

git reset --hard HEAD~N

其他回答

这是另一种方法:

签出要还原的分支,然后将本地工作副本重置为远程服务器上最新的提交(之后的所有内容都将再见)。为此,在SourceTree中,我右键单击并选择“Reset BRANCHNAME To this commit”。我认为命令行是:

git reset --hard COMMIT_ID

因为您刚刚从远程签出了分支,所以您不会担心丢失任何本地更改。但如果你这样做,这将失去他们。

然后导航到存储库的本地目录并运行以下命令:

git -c diff.mnemonicprefix=false -c core.quotepath=false \
push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

这将删除本地存储库中当前提交之后的所有提交,但仅限于该分支。

使用git还原https://git-scm.com/docs/git-revert。它将还原所有代码,然后您可以进行下一次提交。然后head将指向上一次提交的代码。还原的提交不会删除,但不会影响您上次提交。

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

$ git reset --hard HEAD^

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

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

$ git revert HEAD

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

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