如何删除这些提交

时间:2016-06-07 16:41:54

标签: git

我遇到这种情况:

                    B     C     D
              /-----*-----*-----*
-*---*---*---*---*---* branch A
 A1  A2  A3  A4  A5  A6

提交B,C,D不属于任何分支。如果我运行我的幻想git lg它不会显示它们附近的任何分支标签(它适用于主,源/主,HEAD,主题分支等)。如果我结账,我会转移到#34;分离的头部" state(这是预期的,因为我可以检查它们的唯一方法是使用sha1)。如何删除它们?

到目前为止我尝试过的事情:

  1. Checkout提交D并运行git reset HEAD~3 --hard,HEAD指针移动到A4,但提交仍在此处。
  2. 手动运行git reflog expire --expire=now --all,然后是git gc --prune=now,提交仍在此处。
  3. 发生了什么以及如何删除这些提交?

    编辑:39d9480是有问题的提交之一。尝试使用merge-base,得到了这个输出:

    git merge-base --is-ancestor 39d9480 master; echo $?
    0
    git merge-base --is-ancestor master 39d9480; echo $?
    1
    

    在尝试变基时,我没有看到这个提交。

3 个答案:

答案 0 :(得分:0)

$('#myform').serializeArray(); 命令仅扫描本地和远程分支。此脚本将显示任何类型的引用,其中包含具有给定哈希的提交:

git branch 散列 git for-each-ref -s --format 'if git merge-base --is-ancestor

答案 1 :(得分:-1)

据我所知,您无法自行删除提交。有些时候它们会消失,感谢Git。但他们不会干扰你的工作:)

答案 2 :(得分:-1)

您可以尝试创建分支,将其重新绑定为空,然后将其删除:

git checkout D_HASH
git checkout -b disposable
git rebase -i HEAD~4
[ interactively delete commits from branch only -- do NOT delete A4 ]
git branch -D disposable