许多卫星之前,我在我的git
存储库中添加了一棵子树。该子树包含多个文件夹和文件。我添加了子树,而不是创建子模块(按照建议)。现在我意识到我只想要子树中的其中一个文件,其余的都不需要。更糟糕的是,当其他clone
我的存储库中,他们得到的不是预期的 - 与子树和我创建的其他代码存在一些冲突。如何删除以前添加的Git子树及其历史记录
我能得到的文件/文件夹的骑
git rm subtree–folder1 subtree_folder2 subtree_files.*
然而
,我还是留下了从树一个漫长的提交历史。
自从我最初添加子树并且不能丢失我已生成的提交历史记录以来,我已经做了相当多的开发。
总之这是我想什么:
- 删除所有的子树的文件/文件夹。
- 忘记所有子树提交的历史。
- 只留下我的代码和我的历史。
这可能吗?
PS。一种可能的复杂情况是,我将我希望从子树保留的单个头文件移到我的代码中的某个文件夹中。我希望这不会妨碍我忘记子树历史。
的尝试
从远程服务器重新检出后,我有以下几点:
$ ls
.git CMakeLists.txt Read.cpp logging.conf
.gitignore ENDF6 TestData src
.sparse-checkout LICENCE doc test
.travis.yml README.md include tools
凡.gitignore
只有: 编译/ 调试/
当我尝试的命令建议我没有得到非常满意的答复:
$ git filter-branch --index-filter 'git rm --cached -rf test tools src doc LICENCE README.md .travis.yml' HEAD
Rewrite 2fec85e41e40ae18efd1b130f55b14166a422c7f (1/1701)fatal: pathspec 'test' did not match any files
index filter failed: git rm --cached -rf test tools src doc LICENCE README.md .travis.yml
我不确定它为什么说它在test
出现问题时显然存在。我很困惑。
您是否尝试过简单地使用'git rm'来删除子树? –
2014-09-29 20:02:46
@hunch_hunch我这样做,以及这里的命令:http://stackoverflow.com/questions/15890047/how-to-remove-history-of-deleted-git-subtree-folder但我仍然有所有的历史子树。帮帮我! – jlconlin 2014-09-29 20:31:14
您可以通过rebase或filter-branch重写您的资料库历史记录吗? – 2014-10-06 21:39:46