gpt4 book ai didi

带有可选参数的 git 别名

转载 作者:太空狗 更新时间:2023-10-29 12:56:37 26 4
gpt4 key购买 nike

我想确保我的最新提交在我推送之前具有当前日期。因为我总是在 merge + 推送之前 rebase 为 master,所以我做了这个别名:

[alias]
sync = !git commit --amend --date=today && git rebase master

问题是,它不断启动我的文本编辑器,要求提供新的提交消息。有没有办法有一个可选参数,以便我可以选择使用:

git sync 'my commit message'

git sync

后者将简单地使用现有的提交消息,无论它碰巧是什么?

最佳答案

要将额外参数应用于别名“命令行”末尾以外的任何内容,您需要将 shell 命令放在脚本中。您可以使用外部脚本(如 jdelStrother’s answer )来完成,也可以使用“内联”shell 脚本来完成。

您可以使用 -m喂食git commit您的新消息或使用 -C HEAD/--reuse-message=HEAD让它使用现有消息和作者的选项(它还会重用作者时间戳,但您正在使用 --date=… 重置它)。使用这些选项中的任何一个都会阻止 Git 为您的提交消息打开编辑器。

这是一个“内联”shell 脚本:

git config --global alias.sync '!sh -c '\''git commit --amend --date=today ${1+-m} "${1---reuse-message=HEAD}" && git rebase master'\'' -'

这个小脚本的核心是一对条件参数扩展:

${1+-m} "${1---reuse-message=HEAD}"

当您使用额外参数调用它时(即您的替换日志消息),这些扩展为两个 shell 词:-m "<your new log message>" .当您不提供额外参数时,它们会扩展为一个单词:"--reuse-message=HEAD" .

结尾的破折号也很重要;它可以是任何 shell 单词,关键是必须有一些东西,因为 shell 将使用它来初始化它的 $0参数(通常有一个默认值,所以它对条件扩展本身没有用)。


如果我误解了你实际上想在不提供额外参数时看到编辑器,那么使用单个扩展 ${1+-m "$1"}而不是一对扩展。

关于带有可选参数的 git 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6621874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com