删除旧的git提交

Jos*_*osh 75 git

我对git很新,并且想知道这样的事情是否可行?

>git log --pretty=oneline --abbrev-commit
2f05aba Added new feature
3371cec Fixed screw up    <-- I want to remove this
daed25c Screw up          <-- and remove this.
e2b2a84 First.                So it's like they never happend.
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Sha*_*hur 79

如果你真的希望删除它们(从历史中擦除它们,再也不会被看到),你可以

运行rebase:

git rebase -i HEAD~4
Run Code Online (Sandbox Code Playgroud)

然后,只需删除(或注释掉)与您要删除的提交相对应的行,如下所示:

pick 2f05aba ... #will be preserved
#pick 3371cec ... #will be deleted
#pick daed25c ... #will be deleted
pick e2b2a84 ... #will be preserved
Run Code Online (Sandbox Code Playgroud)

  • 我是 github 的新手,在那之后你如何推送更改(当我单击同步时,它只会恢复我所做的)。我想我明白了:`git push origin HEAD --force` (2认同)
  • @AlexanderMills 只要你不推动它,它就不会改变上游的任何东西(如果你这样做了,你必须像愤怒的丹所说的那样添加 --force 标志)。 (2认同)
  • `d` 或 `drop` 是从历史记录中删除提交的命令。 (2认同)

Dev*_*eve 58

这是可能的git rebase.请尝试以下方法

git rebase -i HEAD~4
Run Code Online (Sandbox Code Playgroud)

然后,按照编辑器中的交互式说明进行操作.在第一步中,你"压缩"提交.它应该看起来像这样:

pick 2f05aba ... will be preserved
squash 3371cec ... will be squashed with daed25c
squash daed25c ... will be squashed with e2b2a84
pick e2b2a84 .. will contain this and 3371cec and daed25c
Run Code Online (Sandbox Code Playgroud)

在第二步中,您可以编辑提交消息.

  • 删除提交而不是压缩它们不是问题吗? (20认同)
  • @Stony:嗯,你也可以删除它们.但是从OP中的提交注释("搞砸"和"固定搞砸")我假设一个是撤消另一个,你也可以压扁两个. (2认同)

rus*_*oue 12

要完全删除提交,现在有一个drop用于 git 交互式变基的新选项。第一次运行:

git rebase -i HEAD~4
Run Code Online (Sandbox Code Playgroud)

然后替换pickdrop的提交(S)被丢弃:

pick 2f05aba ... #will be preserved
drop 3371cec ... #will be dropped
drop daed25c ... #will be dropped
pick e2b2a84 ... #will be preserved
Run Code Online (Sandbox Code Playgroud)

这对我来说在 Fedora 上有以下版本:

$ git version
git version 2.21.0
Run Code Online (Sandbox Code Playgroud)


Aba*_*art 6

当您想要在单个哈希下生成合并提交的列表时,Squash 非常有用,但如果您希望进行三个单独的提交并获得看起来像是单个提交的最终输出,我建议fixup

git rebase -i HEAD~4

pick 2f05aba ... will be preserved
fixup 3371cec ... will be merged with 2f05aba (message lost)
fixup daed25c ... will be merged with 3371cec (message lost)
pick e2b2a84 .. will be preserved
Run Code Online (Sandbox Code Playgroud)

您可以在交互式 rebase UI 的命令列表中找到更多信息。