Многие луны назад я добавил поддерево в мой репозиторий git
. Это поддерево содержало несколько папок и файлов. Я добавил поддерево вместо создания подмодуля (как рекомендовано). Теперь я понимаю, что мне нужен только один из файлов в поддереве и ни один из остальных. Хуже того, когда другие clone
мои репозитории, то, что они получают, не то, что ожидается - есть некоторый конфликт с поддеревом и другим кодом, который я создал.
Я могу кататься с файлами/папками с помощью
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
, когда он явно там. Я озадачен.