我有时在git上使用这个命令。
$ git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "wrong@address.local" ];
then
GIT_AUTHOR_NAME="myname";
GIT_AUTHOR_EMAIL="right@address.com";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
我想将其添加为别名。 然后我尝试如下,它没有工作......
git config --global alias.rewritelog '!f(){ \
git filter-branch --commit-filter \' \
if [ "$GIT_AUTHOR_EMAIL" = "wrong@address.local" ]; \
then \
GIT_AUTHOR_NAME="myname"; \
GIT_AUTHOR_EMAIL="right@address.com"; \
git commit-tree "$@"; \
else \
git commit-tree "$@"; \
fi\' HEAD \
};f'
执行此命令后,发生错误。
zsh: parse error near `then'
答案 0 :(得分:2)
您无法在单引号内转义单引号。 幸运的是,你可以在双引号内逃避双引号。 使用双引号而不是单引号括起来:
git config --global alias.rewritelog "!f(){ \
git filter-branch --commit-filter ' \
if [ \"$GIT_AUTHOR_EMAIL\" = wrong@address.local ]; \
then \
GIT_AUTHOR_NAME=myname; \
GIT_AUTHOR_EMAIL=right@address.com; \
fi; \
git commit-tree \"$@\"' HEAD; };f"
我还简化了原始代码并删除了一些不必要的双引号。