我的git-Repo目前看起来像这样:
.git\
A_Dir\
+---- B_Dir\
+---- C_Dir\
+---- ManyFiles
我想将A_Dir
的所有内容向上移动一级(并删除A_Dir
),如此[包括整个历史记录,引用,标记 - 就好像{的内容一样{1}}始终位于A_Dir
的同一级别,以便我能够合并所有分支 - 因为移动从未发生过]:
.git
我已经在stackoverflow上找到了一些答案,如:
.git\
B_Dir\
C_Dir\
ManyFiles
这会重写整个历史记录,但会将内容移到git filter-branch --index-filter 'git ls-files -s |
sed "s-\t\"*-&new_subdir/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info &&
mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' --tag-name-filter cat -- --all
目录中。我实际上需要执行反向的命令!
有人可以帮忙吗?
答案 0 :(得分:0)
git filter-branch
通过其--subdirectory-filter
选项明确支持您想要的内容:
git filter-branch --subdirectory-filter A_Dir --tag-name-filter cat -- --all
A_Dir
以外的任何内容的历史记录都将丢失。由于--tag-name-filter
选项,这也将重写任何标记以指向修改后的提交。