【问题标题】:Remove a past git commit from history - non-interactively从历史记录中删除过去的 git 提交 - 非交互式
【发布时间】:2021-11-12 19:33:32
【问题描述】:

阅读答案:

Git - Remove commit from history

我只看到涉及交互式编辑 TODO 文件的建议。有没有办法在给定哈希的情况下删除单个提交,并保留(“选择”)所有后续提交,而无需用户交互?

【问题讨论】:

  • 看起来可以使用GIT_SEQUENCE_EDITOR 环境变量来完成,例如sed: GIT_SEQUENCE_EDITOR="sed -i '/p <SHA1>/d'" git rebase -i <UPSTREAM>(需要-i 开关:它将编辑/.git/rebase-merge/git-rebase-todo 文件-地方)。 GIT_SEQUENCE_EDITOR 提示在这里找到:stackoverflow.com/questions/12394166/…
  • 我之前也想知道这个问题,但我认为git-rebase 对于这种情况来说“太瓷了”,可能可以通过使用一些管道命令来解决。
  • @fluffy:你不是说/pick <SHA1>/d吗?
  • 当你说“删除提交”时,你是想保留提交中的内容,还是也想丢弃它?

标签: git automation git-rebase


【解决方案1】:

基本解决方案:

由于@phd的评论而得到的解决方案,最初发现here

要删除带有哈希值SHA 的提交,请编写:

git rebase --onto SHA^ SHA

但请记住,变基和合并具有复杂的交互,如果您的历史涉及合并,您应该read about

樱桃在上面:

您可以通过~/.gitconfig为这个成语创建一个别名:

[alias]
    drop = !git rebase --onto $1^ $1 && :

你可以用它来简单地写:

git drop SHA

【讨论】:

    猜你喜欢
    • 2014-11-20
    • 2021-10-15
    • 1970-01-01
    • 2015-09-02
    • 2013-08-03
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 2013-01-23
    相关资源
    最近更新 更多