Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除git存储库中不需要的额外根提交?_Git - Fatal编程技术网

如何删除git存储库中不需要的额外根提交?

如何删除git存储库中不需要的额外根提交?,git,Git,我最近转换了一个subversion repo,它在那之前是从cvs转换而来的,最后我在树的底部得到了以下结构(为了清晰起见简化): * master | ... | | * G |\ | * F | * E | * D | * C Initial commit. | | * A New repository initialized by cvs2svn. G-A中的行包含不需要的提交,我已使用“git filter branch”成功删除了这些提交。我希望能够完全删除该行,包括最初的 在A

我最近转换了一个subversion repo,它在那之前是从cvs转换而来的,最后我在树的底部得到了以下结构(为了清晰起见简化):

* master
|
...
|
|
* G 
|\
| * F
| * E
| * D
| * C Initial commit.
|
|
* A New repository initialized by cvs2svn.
G-A中的行包含不需要的提交,我已使用“git filter branch”成功删除了这些提交。我希望能够完全删除该行,包括最初的 在A处空根提交,只有一行返回到C

因此,我想将A作为G的父级删除并允许它被gc'd,但我不确定这是否可行。

与G上的
--父级筛选器一起使用:

$ git filter-branch --parent-filter \
    'test $GIT_COMMIT = G && echo "-p F" || cat' HEAD

用实际SHA-1值替换
G
F

谢谢。这是正确的。唯一的区别是我最终使用了“---all”而不是“HEAD”,因为实际上有多个分支以G为祖先。