許多衛星之前,我在我的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