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


当前回答

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

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

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

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

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

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

其他回答

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 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

祝你今天愉快。

如果你是IntelliJ用户,界面简直太棒了。只需单击一次,即可立即看到效果。这个地方的快捷方式:MacOS上的Cmd+9。

#[快速回答]

您有许多选择,例如:

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

正如您在上图中看到的,我想删除revert“test change 2”提交(SHA1 ID:015b5220c50e3dfbb1063f23789d92ae1d3481a2(您可以使用gitbash中的gitk命令获取SHA1 ID))。

为此,我可以使用(以下所有命令仅适用于本地。删除后需要推送):

git reset--hard 515b5220c50e3dfbb1063f23789d92ae1d3481a2//将您备份到该提交(测试更改4提交的SHA1 ID为515b5220C50e3dfbb 1063f23799d92ae 1d3481A2)gitreset-hardHEAD~1//它在一次提交之前备份您。git reset--hard HEAD ^//从git中删除最后一次提交

删除后: