2
有没有人有一个可以浏览历史的git脚本,查看每个版本,应用清理脚本,然后将清理后的版本检入另一个存储库?重建git历史的脚本,将代码清理应用到每个版本
我有一些我一直在开发的代码,但我没有与代码格式一致,例如标签与空格等。我想重写我的整个历史,以符合新标准。
有没有人有一个可以浏览历史的git脚本,查看每个版本,应用清理脚本,然后将清理后的版本检入另一个存储库?重建git历史的脚本,将代码清理应用到每个版本
我有一些我一直在开发的代码,但我没有与代码格式一致,例如标签与空格等。我想重写我的整个历史,以符合新标准。
git filter-branch
命令可以满足您的需求。
例如:
# Make a backup!
cp -r <repo> <repo>.backup
cd <repo>
# Replace tabs with two spaces in all .cpp and .h files in all branches.
git filter-branch --tree-filter \
"find \(-iname '*.cpp' -o -iname '*.h' \) \
-exec sed -i -re 's/\t/ /g' {} \;" -- --all
# Delete branch backups created by 'git filter-branch'.
# From the end of `man git filter-branch`; more cleanup
# suggestions there.
git for-each-ref --format="%(refname)" refs/original/ | \
xargs -n 1 git update-ref -d
# You still have ../<repo>.backup, in case something went wrong.
但要小心......这些将git仓库。 如果有人拥有一个克隆...它不会再连接到您的新回购。 从man git filter-branch
:
警告!重写的历史记录对于所有对象将具有不同的对象名称,并且不会与原始分支会聚。您 将无法轻松地将重写的分支 推送并分发到原始分支的顶部。如果 不知道全部含义,请不要使用此命令,并且无论如何都要避免使用它,如果简单的单个提交就足以解决您的问题,则请不要使用此命令, 。 (见 想改写出版历史的进一步资料混帐底垫(1)“恢复上游REBASE”部分 。)
我使用上述以修正内容在个人回购横跨三个部门约15提交时我意识到我开始使用的文件全是制表符(我在所有编辑中都使用了空格)。 – ntc2 2014-01-06 02:09:24