将所有git内容与文件夹层次结构中的完整历史记录一级移动

时间:2015-03-13 15:59:36

标签: git

我的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 目录中。我实际上需要执行反向的命令!

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

git filter-branch通过其--subdirectory-filter选项明确支持您想要的内容:

git filter-branch --subdirectory-filter A_Dir --tag-name-filter cat -- --all

A_Dir以外的任何内容的历史记录都将丢失。由于--tag-name-filter选项,这也将重写任何标记以指向修改后的提交。