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


当前回答

git rebase -i HEAD~2

这里“2”是您要重新设置基准的提交次数。

'git rebase -i HEAD`

如果您想重新设置所有提交的基础。

然后,您可以选择其中一个选项。

p、 pick=使用提交

r, reword = use commit, but edit the commit message
e, edit = use commit, but stop for amending
s, squash = use commit, but meld into previous commit
f, fixup = like "squash", but discard this commit's log message
x, exec = run command (the rest of the line) using shell
d, drop = remove commit

这些线路可以重新订购;它们是从上到下执行的。如果您删除此处的一行,则承诺将丢失。但是,如果您删除了所有内容,则重新启动将被中止。注意,空提交被注释掉

您只需使用选项“d”或删除包含您提交的行即可删除该提交。

其他回答

如果要保留历史记录,显示提交和还原,应使用:

git revert GIT_COMMIT_HASH

输入消息解释为什么要回复,然后:

git push  

当您发出gitlog时,您将看到“错误”的提交和还原日志消息。

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

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

git reset --soft HEAD~1

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

错误:

我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

祝你今天愉快。

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

git reset --hard HEAD~1

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

git push origin HEAD --force

如果您已经推送,请首先在HEAD($GIT_commit_HASH_HERE)找到您想要的提交,然后运行以下命令:

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force

然后,在复制了回购的每个位置,运行:

git reset --hard origin/master