如何在没有冲突的情况下删除Git中的旧提交

如何在没有冲突的情况下删除Git中的旧提交,git,Git,现在,我有一个非常大的存储库,其中包含以下内容: 最新承诺 这里有很多承诺 第一次提交 我想做的是将提交2和3压缩为一个。我尝试了交互式重基,但存在许多冲突,需要花费不合理的时间来修复这些冲突。解决这些冲突没有任何意义,因为它们最终将成为一个整体 结果如下所示: 最新承诺 初始提交(包括2和3) 你是如何做一个互动的重基的 如果你正在处理挤压一个分支,你不应该有这样的冲突 git rebase -i HEAD~3 然后在vim/editor中 pick commit 3 pick commit

现在,我有一个非常大的存储库,其中包含以下内容:

  • 最新承诺
  • 这里有很多承诺
  • 第一次提交
  • 我想做的是将提交2和3压缩为一个。我尝试了交互式重基,但存在许多冲突,需要花费不合理的时间来修复这些冲突。解决这些冲突没有任何意义,因为它们最终将成为一个整体

    结果如下所示:

  • 最新承诺
  • 初始提交(包括2和3)

  • 你是如何做一个互动的重基的

    如果你正在处理挤压一个分支,你不应该有这样的冲突

    git rebase -i HEAD~3
    
    然后在vim/editor中

    pick commit 3
    pick commit 2
    pick commit 1  
    
    换成

    pick commit 3
    squash commit 2
    pick commit 1
    

    3个是最老的,1个是最近的,我用移植物解决了这个问题

    用移植物压扁 添加一个文件.git/info/grafts,将要成为根目录的提交哈希放在那里

    git日志现在将从该提交开始

    要使其“真实”,请运行git过滤器分支


    为什么在重设基础时会出现冲突?我可能遗漏了一些东西,但当我试图挤压到100个佣金时,我没有看到任何冲突。你为什么要这样做?Git和其他版本控制系统的大部分功能来自于保留旧版本。我数不清有多少次我回头看为什么会有变化,就在今天,我需要恢复一年前被删除的东西。如果历史是线性的,就不会有任何冲突。这是某种合并吗?@sylvain.joyeux我想你是对的。OP可能在他们的历史中与冲突相融合。@DanielH有很多原因让人这么做。大量的“添加缺少的逗号”或“忘记返回”提交只会使使用历史记录理解代码意图变得更加困难。Git有很多“风格”的用法,一个常见的用法是“提交小的、经常的、在推之前重写历史”。但是,如果一个人这样做的话,就不应该在中间使用合并。我正是这样重新建立的,而且我遇到了很多合并冲突。分支本身包含多个合并提交