大家好我正在尝试添加一个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"
但它仍然抱怨配置错误。
答案 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