我想为以下 git 命令添加别名:
git commit --amend -m $(git log --format=%B -n1)
但是,如果我将以下内容添加到我的.gitconfig
IT 错误中,则会出现“错误:未知选项‘格式 = %B’”
[alias]
amend = commit --amend -m $(git log --format=%B -n1)
有没有办法将此命令用作别名?如果我将子命令放在单引号中,它会将其视为字符串:
[alias]
amend = commit --amend -m '$(git log --format=%B -n1)'
运行此使用git amend
会导致最后一次提交被重命名为文字:$(git log --format=%B -n1)
。
答案1
我对此几乎一无所知,git
但我知道$( )
需要一个可以解释它的 shell。通常 git 别名是 的内部别名git
,它们不运行任何 shell。要定义运行任意命令的 git 别名,您需要!
。
我的测试表明我不需要在 shell 中运行某些东西。看来后面的命令!sh -c …
无论如何都会运行。注意git
!
sh
sh
$( )
应该用双引号引起来。
用这个:
[alias]
amend = !git commit --amend -m \"$(git log --format=%B -n1)\"
双引号已转义,因此(外部)git
不会用完它们。您需要它们来执行sh
。
答案2
@Kamil Maciorowski 的回答是正确的,但我刚刚意识到我想要的功能可以通过运行来实现:
git commit --amend --no-edit
可以使用以下方法轻松设置别名:
[alias]
amend = commit --amend --no-edit