Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 有没有办法让别名包含$(!!)并在其';跑什么?_Git_Bash - Fatal编程技术网

Git 有没有办法让别名包含$(!!)并在其';跑什么?

Git 有没有办法让别名包含$(!!)并在其';跑什么?,git,bash,Git,Bash,或者一个函数,或者其他任何东西 我的用例是,我运行一个命令,该命令将在git存储库中为我找到一个分支名称,该命令的唯一输出是该分支名称,可通过git checkout。然后我键入git checkout$(!!)以实际执行签出。我想要的是git checkout$(!!)的别名(不管它是否是“真实的”别名) 我不希望使用单个命令来查找分支并将其签出,因为我用于查找分支的命令可能会输出多个分支名称,在这种情况下,我会使用更具体的参数重新运行它。(它是git branch-r | cut-d'/'-

或者一个函数,或者其他任何东西

我的用例是,我运行一个命令,该命令将在git存储库中为我找到一个分支名称,该命令的唯一输出是该分支名称,可通过
git checkout
。然后我键入
git checkout$(!!)
以实际执行签出。我想要的是
git checkout$(!!)
的别名(不管它是否是“真实的”
别名)


我不希望使用单个命令来查找分支并将其签出,因为我用于查找分支的命令可能会输出多个分支名称,在这种情况下,我会使用更具体的参数重新运行它。(它是git branch-r | cut-d'/'-f2-| grep的别名)

内置的
fc
提取(默认情况下,允许您编辑)bash历史中的上一个命令。使用
fc-nl-1-1
返回上一个命令(作为标准输出)。因此:

再次执行命令
执行刚才执行的操作,就像
。稍微修改一下,我们得到(修复,来自R.Woods):


这应该会起作用(我没有测试过)。请注意,这是而且必须是一个bash别名,而不是Git别名:Git无法访问shell的历史记录(除了读取文件,但不能保证它是最新的,或者我应该说,至少从我刚刚检查的bash文档来看,不能保证它是最新的)。

内置摘录(默认情况下,允许您编辑)bash历史记录中的上一个命令。使用
fc-nl-1-1
返回上一个命令(作为标准输出)。因此:

再次执行命令
执行您刚才再次执行的操作,就像
!!
。稍微修改一下,我们得到(修复,来自R.Woods):


注意,这是而且必须是一个bash别名,而不是Git别名:Git无法访问shell的历史记录(除非通过读取文件,但这不能保证是最新的,或者我应该说,至少从我刚刚检查的bash文档来看,这不能保证是最新的).

So
eval git checkout$(fc-nl-1-1)
给了我pathspec错误,因为$(fc)正在扩展到给出分支名称的命令。如果我在第二个$()或backticks中包装它,我会得到一个错误,说“找不到命令分支grep”(分支grep是我问题中提到的别名)。似乎有什么东西阻止了子shell评估别名?编辑:没关系--
git checkout$(eval$(fc-nl-1-1))
成功了。@R.Woods:啊,好吧,我会更新答案。eval的位置总是有点棘手!所以
eval git checkout$(fc-nl-1-1)
会给我路径规范错误,因为$(fc)正在扩展到提供分支名称的命令。如果我将其包装在第二个$()或倒勾中,我会收到一个错误,说“找不到命令分支grep”(分支grep是我问题中提到的别名)。似乎有什么东西阻止子shell计算别名?编辑:没关系--
git checkout$(eval$(fc-nl-1-1))
成功了。@R.Woods:啊,好吧,我会更新答案。eval的位置总是有点棘手!
alias again='eval $(fc -nl -1 -1)'
alias xxx='git checkout $(eval $(fc -nl -1 -1))'