假设我有一个包含以下目录结构的存储库:
repo/
blog/
_posts/
some-post.html
another-file.txt
我想搬家_posts
到存储库的顶层,因此结构将如下所示:
repo/
_posts/
some-post.html
another-file.txt
这很简单git mv
,但我想让历史看起来像_posts
always存在于回购协议的根部,我希望能够获得整个历史some-post.html
via git log -- _posts/some-post.html
。我想我可以使用一些魔法git filter-branch
来实现这一点,但我还没有弄清楚具体如何做到这一点。有任何想法吗?
您可以使用子目录过滤器来实现此目的
$ git filter-branch --subdirectory-filter blog/ -- --all
EDIT 1:如果你不想有效地_posts
根,使用树过滤器代替:
$ git filter-branch --tree-filter 'mv blog/_posts .' HEAD
EDIT 2: If blog/_posts
某些提交中不存在,上述操作将失败。使用这个代替:
$ git filter-branch --tree-filter 'test -d blog/_posts && mv blog/_posts . || echo "Nothing to do"' HEAD
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)