bwo*_*ebi 7 git git-filter-branch git-subtree git-rewrite-history
我实际上有两个存储库:
mainexternal该main仓库是一段时间后,将合并后external/main的目录(如子树).现在我想将所做的更改迁移external/main回main存储库,但只有这些提交而没有其他无关的提交external/<anything-else>.
我实际上尝试过经典:
git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter main -- --all
Run Code Online (Sandbox Code Playgroud)
但是这也删除了对初始main存储库所做的所有提交,只留下了在externalgit存储库中创建的提交.
那么:如何只保留提交:
a)制作初始main存储库
和
b)制作external(external/main)的子树
当我尝试时git pull -s subtree ../external,提交都被合并,包括在子树中没有改变任何内容的提交.我想只有实际改变子树中某些内容的提交,并且还只有来自子树的文件信息.
您应该能够通过在命令部分中filter-branch使用来限制重写的提交:--not --remotes<rev-list options>
git filter-branch --tag-name-filter cat --prune-empty
--subdirectory-filter main -- --all --not --remotes
Run Code Online (Sandbox Code Playgroud)
这将导致filter-branch不包括可从远程分支访问的提交。如果您有多个遥控器,您可以使用类似的方法--remotes=origin来指定要考虑哪一个。