如何使用带参数的嵌套命令创建Git别名?

在我的点文件中,我有以下功能:

function undelete {
  git checkout $(git rev-list -n 1 HEAD -- "$1")^ -- "$1"
}

...我这样使用:

$ undelete /path/to/deleted/file.txt

我想范围这个命令,因为它是一个git命令。

我如何创建一个git别名,以便我可以使用这个git alias命令?

$ git undelete /path/to/deleted/file.txt

这里有两个,我的尝试不起作用:

git config --global alias.undelete "!f() { git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1; }; f"
git config --global alias.undelete "!sh -c 'git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1' -"

可以用别名来做到这一点(参见jthill的评论):

git config --global alias.undelete '!f() { git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1; }; f'
git config --global alias.undelete '!sh -c "git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1" -'

我建议编写任何复杂的shell脚本:

#! /bin/sh
#
# git-undelete: find path in recent history and extract
. git-sh-setup # see $(git --exec-path)/git-sh-setup

... more stuff here if/as appropriate ...
for path do
    rev=$(git rev-list -n 1 HEAD -- "$path") || exit 1
    git checkout ${rev}^ -- "$path" || exit 1
done

for循环旨在使其允许多个路径名称“取消删除”)。

将脚本命名为git-undelete ,把它放在你的$PATH (我把脚本放在$HOME/scripts ),并且任何时候你运行git undelete ,Git都会找到你的git-undelete脚本并运行它(用$PATH修改为git --exec-path ,让. git-sh-setup工作)。

链接地址: http://www.djcxy.com/p/3161.html

上一篇: How to create a Git alias with nested commands with parameters?

下一篇: Revert push check in from git