在我的dotfiles中,我有以下功能:
function undelete {
git checkout $(git rev-list -n 1 HEAD -- "$1")^ -- "$1"
}
...我这样使用:
$ undelete /path/to/deleted/file.txt
我希望将此命令作为范围,因为它是一个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' -"
答案 0 :(得分:2)
可以使用别名来执行此操作(请参阅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
1}}脚本并运行它(修改$PATH
以预先git --exec-path
,以便. git-sh-setup
正常工作。