我想重寫歷史記錄並將某個文件夾中的所有文件和文件夾移動到所有分支的2個文件夾中。Git重寫歷史記錄將文件夾和文件移動到父文件夾
我的回購協議是這樣的:
- SRC
- V105
- SRC
- 文件
- 文件夾
- 個工具
- LIB
我希望它是:
- SRC
- 文件
- 文件夾
- 工具
- LIB
我知道如何改寫歷史的文件夾
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatched somefolder/somefolder' --prune-empty --tag-name-filter cat -- --all
我也知道git mv
命令遞歸地刪除文件。
使用以下命令將文件和文件夾全部移動到正確的文件夾。第一個模式匹配提供的文件夾內的所有文件和文件夾。第二種模式匹配以點開頭的所有文件和文件夾。
git mv src/v105/src/* src/v105/src/.[^.]* src
然而,當我想用這個命令重寫歷史命令它不工作。
git filter-branch --force --index-filter 'git mv src/v105/src/* src/v105/src/.[^.]* src --cached --ignore-unmatched' --prune-empty --tag-name-filter cat -- --all
由於src文件夾不會在所有情況下,我犯下的歷史存在,它告訴我它無法找到在src目錄。任何想法如何解決這個問題?
UPDATE
git filter-branch --force --index-filter 'if [-d 'src/v105/'] then git mv src/v105/src/* src/v105/src/.[^.]* src fi' --prune-empty --tag-name-filter cat -- --all
導致意外的文件結束。
爲什麼您需要重寫歷史記錄?在任何情況下,你不能只複製文件,然後調用filter-branch刪除舊的位置? – adamdunson 2013-05-08 21:46:21
因爲我正在清理回購。我希望它變小,所以我不希望我的清理操作成爲新的提交。 – 2013-05-09 09:04:12