重写 Git 历史以将所有工作放在子文件夹而不是根文件夹中

Rewriting Git history to place all work in a subfolder instead of root

我有一个简单的存储库,它具有线性历史,其中的工作是在根文件夹中完成的。我想重写历史,以便每次提交的所有工作看起来都发生在 /server 目录而不是根目录中。

最后,存储库的根目录中应该有一个名为 server 的文件夹,我项目的所有文件和文件夹现在(以及之前的所有历史记录点)都位于 /server .

您正在寻找 git filter-repo。这正是它被写来做的事情;请参阅自述文件的基本原理部分中的#3。

https://github.com/newren/git-filter-repo#design-rationale-behind-filter-repo

git filter-branch --commit-filter '  
            toptree=`printf "040000 tree %s\tserver"  | git mktree`
            shift
            git commit-tree $toptree "$@"
    ' -- --branches