添加管道不工作的git别名

时间:2015-12-01 14:19:31

标签: git git-alias

大家好我正在尝试添加一个git别名,让我中止一个刚刚完成的rebase。我尝试在.gitconfig

中添加此内容
rebabort = !sh -c 'git reflog | grep -v rebase | head -1 | sed -e "s/^\([[:alnum:]][[:alnum:]]*\)\(.*\)/\1/g" | git reset --hard'

但它抱怨配置错误。无论如何,我试图以下列方式添加别名:

git config alias.rebabort '!git reflog | grep -v rebase | head -1 | sed -e "s/^\([[:alnum:]][[:alnum:]]*\)\(.*\)/\1/g" | git reset --hard'

它有效。我错过了什么?

更新

我还尝试在.gitconfig

中添加此内容
rebabort = "!f() { \
                git reflog | grep -v rebase | head -1 | sed -e 's/^\([[:alnum:]][[:alnum:]]*\)\(.*\)/\1/g\' | git reset --hard;
    }; f"

和这个

rebabort = !"git reflog | grep -v rebase | head -1 | sed -e 's/^\([[:alnum:]][[:alnum:]]*\)\(.*\)/\1/g' | git reset --hard"

但它仍然抱怨配置错误。

1 个答案:

答案 0 :(得分:2)

我复制了你的“行有效”,然后查看了我的虚拟项目.git/config,发现了以下内容:

[alias]
        rebabort = !git reflog | grep -v rebase | head -1 | sed -e s/^\\([[:alnum:]][[:alnum:]]*\\)\\(.*\\)/\\1/g | git reset --hard

只需将其复制到~/.gitconfig

即可

看起来很简单,不需要sh -c这些东西。你的.gitconfig不是.bashrc;我这样说是因为看起来你试图以.bashrc格式编写别名。

此外,为了您的参考,您可以完成以下相同的效果(您的行有效,加上--global)选项,因为--global通常会添加到您的~/.gitconfig

git config --global alias.rebabort '!git reflog | grep -v rebase | head -1 | sed -e "s/^\([[:alnum:]][[:alnum:]]*\)\(.*\)/\1/g" | git reset --hard'

git config的帮助文件也非常适合学习新的选项和技巧。 https://git-scm.com/docs/git-config