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


当前回答

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

git reset --soft HEAD~1

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

git reset --hard HEAD~1

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

其他回答

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

$ git reset --hard HEAD^

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

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

$ git revert HEAD

这里有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:这不会保留您以前的提交历史。

为了我,rebase做了这个把戏

$ git rebase -i HEAD~98

# Delete everything except for the most recent commit on the shown editor caused by "rebase"

$ git push origin -f production-static

注:在强制推送以减少我的评论之后。然后我推送了另一组文件,然后在另一台计算机上尝试使用相同的“存储库和分支”。令人惊讶的是,没有冲突。这成为了我减少存储库大小的方法,同时避免了对使用相同git的其他本地用户的拉取冲突

错误:

我git rebase-I--root'ed我的分支,无知地认为我可以重新编写与主提交不同的第一个提交(GitHub for Windows默认视图是与主提交的比较,隐藏了它的全部)。

我留着硅谷的胡子,而900多个会员加入了Sublime。退出时,没有任何变化,我给电池充电,然后开始刮胡子,因为所有900多个人的提交都是无意识地重新启动的-将他们的提交时间重置为现在。

为了击败Git并保持原始时间,我删除了本地存储库并从远程重新克隆。

现在,它重新添加了一个最新的不需要的承诺,我希望删除,所以继续这样做。

用尽所有选项:

我不希望git-restore——它会创建一个额外的提交,让git占据上风。

git reset-hard HEAD什么都没做,在检查了reflog之后,最后一个也是唯一一个HEAD是克隆-git获胜。

为了获得最新的SHA,我查看了github.com上的远程存储库-小赢。

在认为git-reset--hard<SHA>有效后,我将另一个分支更新为master和1…2…poof!提交回来了-Git赢了。

正在检查返回到master,是时候尝试git-rebase-i<SHA>了,然后删除该行。。。没用,很遗憾地说。“如果您删除此处的一行,承诺将丢失”。啊。。。在2.8.3发行说明中,对新功能troll n00b进行了粉饰。

解决方案:

git-rebase-i<SHA>然后d,drop=删除提交。

为了验证,我检查了另一个分支,瞧,没有隐藏的承诺从主节点获取/拉取。

https://twitter.com/holman/status/706006896273063936

祝你今天愉快。

这里我只发布了一条清晰的管道

步骤1:使用gitlog获取提交ID。

git log

步骤2:使用git reset返回到以前的版本:

git reset --hard <your commit id>