昨天我在我的 git repo 上做了这些操作之一(见下面的代码片段),以便有效地将我的项目移动到文件夹层次结构中的几个文件夹。这基本上列出了所有文件并向它们添加前缀文件夹名称并相应地更新索引。
旧布局:
+ Root
- Sublevel 1
- Sublevel 2
- .git was here
新的,所需的布局:
+ Root
- .git moved to here, so prefix all index files with "Sublevel 1/Sublevel 2/"
- Sublevel 1
- Sublevel 2
命令:
git filter-branch --index-filter '
git ls-files -s | sed "s-\t-&newRoot/sub1/sub2/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info && mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE
' HEAD
但是,我不知道的这个命令只修改了master
分支。我有大约 8 个其他分支离开 master。当我签出这些其他分支之一时,它会在我将文件夹移动到的新根文件夹级别的原始文件夹结构中签出我的存储库中的所有文件(大约 11,000 个).git
。
我该如何修复这个混乱?损害已经造成。在我运行之前我有一个.git
文件夹的备份,filter-branch
但是在这个备份完成之后我有提交,虽然不多,但足以保证在当前的 repo 上找到一个类似补丁的修复程序。我没有看到该filter-branch
命令有任何明显的特定于分支的参数。