如何删除本地 git 存储库中的特定提交?

mbe*_*lls 1 git git-commit

我的本地存储库包含以下提交:

A ---- B ---- C ---- D ---- E
        \
         1 ---- 2
          \    /
           1.1 
Run Code Online (Sandbox Code Playgroud)

字母更改位于远程存储库上。更改 1、1.1 和 2 是我不再需要的本地存储库中的临时更改。当我在 B 上创建一个包含未提交更改的存储时,这些可能是自动创建的;该存储已被删除。我想让历史变得不那么复杂,这就是为什么我想摆脱这些。

我可以通过清除本地存储库并再次克隆远程存储库来清楚地摆脱这些,但这似乎很严厉。我想保留一个不在远程仓库中的本地分支。

从我到目前为止所读到的内容来看,讨论的重点是如何将多个提交压缩为一个。我还没有找到任何关于删除提交对象的信息。我还尝试过“git prune <提交2的哈希值>”,但它没有做任何事情。

如何删除提交对象 1、1.1 和 2?

提前致谢。

Lak*_*sad 5

只需转到您关心的提交并将其设置为 HEAD 即可。git 垃圾在稍后的某个时间点收集 1.1 和 2。

git checkout sha-of-1
git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)

解决同样问题的另一种方法是:

  • 从您关心的点创建一个新分支。
  • 删除所有其他分支。

    git checkout sha-of-1
    git checkout -b new-branch
    git branch -D 'the branches that have 1.1 and 2'
    
    Run Code Online (Sandbox Code Playgroud)