将所有具有完整历史记录的git内容在文件夹层次结构中上移一级
我的git回购目前看起来如下所示:将所有具有完整历史记录的git内容在文件夹层次结构中上移一级,git,Git,我的git回购目前看起来如下所示: .git\ A_Dir\ +---- B_Dir\ +---- C_Dir\ +---- ManyFiles 我想像这样将A_Dir的所有内容上移一级(并删除A_Dir)[包括整个历史、引用、标记-就好像A_Dir的内容一直在.git的相同Dir级别上,这样我就能够合并所有分支-因为移动从未发生过]: .git\ B_Dir\ C_Dir\ ManyFiles 我已经在stackoverflow上找到了一些答案,比如: git filter-branch
.git\
A_Dir\
+---- B_Dir\
+---- C_Dir\
+---- ManyFiles
我想像这样将A_Dir
的所有内容上移一级(并删除A_Dir
)[包括整个历史、引用、标记-就好像A_Dir
的内容一直在.git
的相同Dir级别上,这样我就能够合并所有分支-因为移动从未发生过]:
.git\
B_Dir\
C_Dir\
ManyFiles
我已经在stackoverflow上找到了一些答案,比如:
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
这会重写整个历史记录,但会将new_subdir
目录中的内容上移。我需要一个反方向的命令
有人能帮忙吗?
git filter branch
通过其--子目录filter
选项明确支持您所需的内容:
git filter-branch --subdirectory-filter A_Dir --tag-name-filter cat -- --all
A_Dir
之外内容的任何历史记录都将丢失。这还将重写任何标记,以指向修改后的提交,这要归功于--tag name filter
选项。这正是我所需要的!很有魅力,非常感谢!