- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想确保我的最新提交在我推送之前具有当前日期。因为我总是在 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/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!