3

我正在尝试添加一个 git 别名,使我中止刚刚完成的变基。我尝试将其添加到.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"

但它仍然抱怨错误的配置。

4

1 回答 1

3

我复制了您的“行之有效的行”,然后查看了我的虚拟项目.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

于 2015-12-01T15:47:05.117 回答