首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用带有参数的嵌套命令创建Git别名?

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

Stack Overflow用户
提问于 2017-05-09 22:45:52
回答 1查看 568关注 0票数 4

在我的dotfiles中,我具有以下功能:

代码语言:javascript
复制
function undelete {
  git checkout $(git rev-list -n 1 HEAD -- "$1")^ -- "$1"
}

…我是这样用的:

代码语言:javascript
复制
$ undelete /path/to/deleted/file.txt

因为它是git命令,所以我想对这个命令进行范围分析。

如何创建git别名,以便可以使用git别名命令?

代码语言:javascript
复制
$ git undelete /path/to/deleted/file.txt

以下是我的两次尝试,这些尝试都是行不通的:

代码语言:javascript
复制
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' -"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-09 23:16:10

可以使用别名(参见jthill's comment)来实现这一点:

代码语言:javascript
复制
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脚本:

代码语言:javascript
复制
#! /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就能工作)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43880999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档