从每一个提交中移除一个文件
git filter-branch --tree-filter 'rm -f filepath' HEAD
--tree-filter 选项在检出项目的每一个提交后运行移除文件命令然后重新提交结果。
--all 在所有分支上执行这个操作。
使一个子目录做为新的根目录
git filter-branch --subdirectory-filter subdir HEAD
Git 会自动移除所有不影响子目录subdir的提交。
全局修改邮箱地址
git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "oldEmail" ];
then
GIT_AUTHOR_NAME="new name";
GIT_AUTHOR_EMAIL="newEmail";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
这会遍历所有提交并修改邮箱地址为新邮箱地址。 因为提交包含了hash值校验和,所以这个命令会修改每一个提交的哈希值校验和, 而不仅仅只是那些匹配邮箱地址的提交。
网友评论