我想重写历史并将某个文件夹 2 文件夹中的所有文件和文件夹移动到所有分支。
我的回购看起来像:
- 源代码
- v105
- 源代码
- 文件
- 文件夹
- 工具
- 库
我希望它是:
- 源代码
- 文件
- 文件夹
- 工具
- 库
我知道如何重写历史记录以递归地删除文件夹中的文件
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
但是,当我想将此命令与 rewrite history 命令一起使用时,它不起作用。
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 目录。任何想法如何解决这个问题?
更新
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
导致文件意外结束。