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


当前回答

如果您刚刚弄糟了上一次提交(错误的消息,忘记添加一些更改),并想在将其推送到公共回购之前修复它,为什么不使用:

git commit --amend -m "New message here"

如果您有新暂存的更改,它们将与上一次提交(您正在尝试删除)合并,并将替换该提交。

当然,如果你在推送之后修改了一个承诺,你就是在改写历史,所以如果你这样做,一定要理解其中的含义。

如果您希望使用上一次提交的消息,也可以传递“--no edit”选项而不是“-m”。

文件:http://git-scm.com/docs/git-commit.html

其他回答

#[快速回答]

您有许多选择,例如:

备选方案1:git rebase-i<YourCommitId>~1将YourCommitId更改为要还原回的提交次数。备选方案2:git reset--硬YourCommitIdgit push<origin><branch>--force将YourCommitId更改为要还原回的提交次数。我不建议使用此选项,因为您可能会丢失正在进行的工作。备选方案3:git reset—软HEAD~1你可以保留你的工作,只撤销承诺。

资料来源:https://gist.github.com/sagarjethi/c07723b2f4fa74ad8bdf229166cf79d8

删除上次提交

例如,您最后一次提交

git推送原点+aa61ab32^:主

现在您要删除此提交,然后使用以下简单方法

步骤

首先将分支重置为当前提交的父级用力将其推至遥控器。

git reset HEAD^--硬git推送原点-f

对于特定的提交,您希望重置如下

git reset bb676878^ --hard

git push origin -f

如果您刚刚弄糟了上一次提交(错误的消息,忘记添加一些更改),并想在将其推送到公共回购之前修复它,为什么不使用:

git commit --amend -m "New message here"

如果您有新暂存的更改,它们将与上一次提交(您正在尝试删除)合并,并将替换该提交。

当然,如果你在推送之后修改了一个承诺,你就是在改写历史,所以如果你这样做,一定要理解其中的含义。

如果您希望使用上一次提交的消息,也可以传递“--no edit”选项而不是“-m”。

文件:http://git-scm.com/docs/git-commit.html

小心:git reset-hard将删除您的工作目录更改。在运行此命令之前,请确保隐藏所有要保留的本地更改。

假设您正在执行该提交,则此命令将使其变得古怪。。。

git reset --hard HEAD~1

HEAD~1表示在HEAD之前提交。

或者,您可以查看gitlog的输出,找到要备份的提交的提交id,然后执行以下操作:

git reset --hard <sha1-commit-id>

如果你已经推了它,你需要用力推才能摆脱它。。。

git push origin HEAD --force

然而,如果其他人已经成功了,那么你最好开始一个新的分支。因为当他们拉动时,它会将其合并到他们的工作中,你会再次将其推高。

如果您已经推送了,那么最好使用git-restore创建一个“镜像”提交,以撤消更改。但是,这两个提交都将在日志中。


仅供参考——git reset——如果你想摆脱“正在进行的工作”,那么硬头非常好。它会将您重置为最近的提交,并清除工作树和索引中的所有更改。


最后,如果您需要找到您“删除”的提交,除非您已经垃圾收集了存储库,否则它通常会出现在gitreflog中。

这里有30多个回答者,我将简单介绍适合我的答案

删除.git文件夹可能会导致git存储库出现问题。如果您希望删除所有提交历史记录,但将代码保持在当前状态,则可以按照以下方式进行操作:

结账

git checkout --orphan latest_branch

添加所有文件

git add -A

提交更改

git commit -m "commit message"

删除分支

git branch -D master

将当前分支重命名为主分支

git branch -m master

最后,强制更新存储库

git push -f origin master

PS:这不会保留您以前的提交历史。