是否可以通过一次git filter-branch来重命名2个或更多的电子邮件地址?
我尝试通过复制this answer来修改if..fi clause的代码
git filter-branch --commit-filter '
if [ "$GIT_COMMITTER_NAME" = "<Old Name 1>" ];
then
GIT_COMMITTER_NAME="<New Name 1>";
GIT_AUTHOR_NAME="<New Name 1>";
GIT_COMMITTER_EMAIL="<New Email 1>";
GIT_AUTHOR_EMAIL="<New Email 1>";
git commit-tree "$@";
else
git commit-tree "$@";
fi
if [ "$GIT_COMMITTER_NAME" = "<Old Name 2>" ];
then
GIT_COMMITTER_NAME="<New Name 2>";
GIT_AUTHOR_NAME="<New Name 2>";
GIT_COMMITTER_EMAIL="<New Email 2>";
GIT_AUTHOR_EMAIL="<New Email 2>";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD但是它给了我在过滤器分支上的错误,看起来是这样的:
error: duplicate parent bc8f9924c33558a275b8f694969529cf56232c80 ignored然后,分支机构的历史被纠缠在一起:

发布于 2015-11-23 08:17:53
在按需要设置所有环境变量之后,只需要一个git commit-tree命令。例如,提交过滤器可能读取如下内容:
git filter-branch -f --commit-filter '
if [ "$GIT_COMMITTER_NAME" = "<Old Name 1>" ]; then
GIT_COMMITTER_NAME="<New Name 1>";
GIT_AUTHOR_NAME="<New Name 1>";
GIT_COMMITTER_EMAIL="<New Email 1>";
GIT_AUTHOR_EMAIL="<New Email 1>";
fi;
if [ "$GIT_COMMITTER_NAME" = "<Old Name 2>" ]; then
GIT_COMMITTER_NAME="<New Name 2>";
GIT_AUTHOR_NAME="<New Name 2>";
GIT_COMMITTER_EMAIL="<New Email 2>";
GIT_AUTHOR_EMAIL="<New Email 2>";
fi;
git commit-tree "$@"
'(虽然如果更改名称的次数越来越多,我可能会运行一个映射文件,而不是一系列容易输入的if ... then,单独映射作者和提交者可能更有意义)。
请记住,filter-branch只是复制您告诉它复制的所有提交(通过使用git commit-tree创建新副本),同时构建一个对的映射。这就是为什么进行两个提交是不好的:一个现有的(旧的) SHA-1现在必须映射到两个新的副本,这在filter-branch如何处理提交图方面是完全不允许的。(如果您选择在复制过程中省略一些提交,多个旧的SHA-1可以映射到单个新的SHA-1。也就是说,新图可以是双射图,也可以是满图图,但是过滤器分支并不真正相信内射图,因为它将尝试将旧的引用映射到新图。)
https://stackoverflow.com/questions/33866185
复制相似问题