我想重写历史记录并将某个文件夹中的所有文件和文件夹移动到所有分支的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