在我的点文件中,我有以下有效的函数:
\n\nfunction undelete {\n git checkout $(git rev-list -n 1 HEAD -- "$1")^ -- "$1"\n}\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6 我这样使用:
\n\n$ undelete /path/to/deleted/file.txt\nRun Code Online (Sandbox Code Playgroud)\n\n我想确定这个命令的范围,因为它是一个 git 命令。
\n\n$ git undelete /path/to/deleted/file.txt\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的两个尝试,但不起作用:
\n\ngit config --global alias.undelete "!f() { git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1; }; f"\ngit config --global alias.undelete "!sh -c \'git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1\' -"\nRun Code Online (Sandbox Code Playgroud)\n
可以使用别名来做到这一点(请参阅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" -'
Run Code Online (Sandbox Code Playgroud)
我建议将任何复杂的内容编写为 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
Run Code Online (Sandbox Code Playgroud)
(该for循环的目的是使其允许多个路径名“取消删除”)。
将脚本命名为git-undelete,将其放入你的$PATH(我将脚本放在$HOME/scripts)中,并且任何时候你运行git undelete,Git 都会找到你的git-undelete脚本并运行它($PATH修改为git --exec-path前面有,这样就可以. git-sh-setup工作了)。
| 归档时间: |
|
| 查看次数: |
671 次 |
| 最近记录: |