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


当前回答

这是另一种方法:

签出要还原的分支,然后将本地工作副本重置为远程服务器上最新的提交(之后的所有内容都将再见)。为此,在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

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

其他回答

假设我们要从回购中删除提交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 --hard HEAD^

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

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

$ git revert HEAD

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

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

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

git reset --soft HEAD^
git pull

要在本地分支中删除,请使用

git reset --hard HEAD~1

要在远程分支中删除,请使用

git push origin HEAD --force
// display git commit log    
$ git log --pretty=oneline --abbrev-commit

// show last two commit and open in your default editor
// then delete second commit line and save it
$ git rebase -i HEAD~2

参考:如何在git、本地和远程中删除提交