在我的点文件,我有以下功能,工作原理:
function undelete {
git checkout $(git rev-list -n 1 HEAD -- "$1")^ -- "$1"
}
......我用这样的:
$ undelete /path/to/deleted/file.txt
我想这一范围的命令,因为它是一个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
工程)。