【问题标题】:git - Remove commit before HEADgit - 在 HEAD 之前删除提交
【发布时间】:2015-12-01 17:46:35
【问题描述】:

好的,我是 Git 新手,想知道如何在 HEAD 之前删除提交。比如——:

commit foo (This is the HEAD)

commit bar (This is what I want to remove)

如何从这个分支中完全删除commit bar,但保留commit foo

【问题讨论】:

    标签: git git-commit


    【解决方案1】:

    git rebase -i HEAD~2

    将让您以交互方式删除提交

    git rebase 将删除该提交的所有引用并更改 HEAD 提交的 id。这意味着如果人们从旧提交分支出来,他们可能会遇到问题

    git revert <commitID>

    可能是保存历史的更好方法

    【讨论】:

    • 如果您与其他人共享该分支,则还原选项要好得多
    • 除了查找提交的 ID(例如使用 git log),您还可以使用 HEAD^HEAD~1 来表示“HEAD 之前的提交”。
    • 我会一直使用 log 来确认 sha1 来确认
    • 好的,给定的命令都不起作用。 git rebase 给出invalid upstream HEAD~2 的错误。 git revert 创建一个额外的提交,但不会从日志中删除我想要的提交。我想要做的是只删除第一次提交,而不是最近的一次。
    • 好的解决了。似乎您无法删除第一个提交,您只能对其进行编辑。所以我删除了第一个提交之前的提交,并相应地编辑了第一个提交。详情请参考link
    【解决方案2】:

    另一种选择是在要删除的提交之前的提交处签出一个新分支:

    git checkout -b new_branch HEAD~2
    

    然后从另一个分支挑选提交到新分支:

    git cherry-pick <hash of the other branch's HEAD>
    

    图表将如下所示:

    * 6a59727 (HEAD, new_branch) foo
    | * 15f07fd (master) foo
    | * 6bba064 bar
    |/  
    * dec804e baz
    

    【讨论】:

      猜你喜欢
      • 2015-12-22
      • 2015-02-23
      • 2018-07-04
      • 2014-01-02
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 2013-10-09
      • 2020-11-27
      相关资源
      最近更新 更多