在我的dotfiles中,我具有以下功能:
function undelete {
git checkout $(git rev-list -n 1 HEAD -- "$1")^ -- "$1"
}…我是这样用的:
$ undelete /path/to/deleted/file.txt因为它是git命令,所以我想对这个命令进行范围分析。
如何创建git别名,以便可以使用git别名命令?
$ 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' -"发布于 2017-05-09 23:16:10
可以使用别名(参见jthill's comment)来实现这一点:
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就能工作)。
https://stackoverflow.com/questions/43880999
复制相似问题