如何在git上添加这个冗长的命令作为别名?

时间:2017-06-05 10:03:10

标签: git

我有时在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'

1 个答案:

答案 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"

我还简化了原始代码并删除了一些不必要的双引号。