bash中的函数提交和推送一个命令

6 git bash

我尝试提交并推送一个命令,输入如下内容:

gm "This is my commit message"

哪个会运行:

git commit -am "This is my commit message" && git push

我在我的尝试过这个功能.bashrc:

function gm() {
     git commit -am $1 && git push
}
Run Code Online (Sandbox Code Playgroud)

哪个有效,除了我不能输入几个单词作为提交消息.我可以跑

gm My_Message

它工作正常,但如果我输入几个单词,比如

gm This is my message

它只会运行git commit -am "This" && git push.我尝试使用引号,但它返回错误.我该如何配置此功能?

Dou*_*der 7

你需要在调用函数和git命令的地方引用.

function gm() {
     git commit -am "$1" && git push
}

gm "This is my message"
Run Code Online (Sandbox Code Playgroud)

另一种方法是:

function gm() {
     git commit -am "$*" && git push
}

gm This is my message
Run Code Online (Sandbox Code Playgroud)

但这意味着:

gm This commit  has double  spaced sections.\t And a tab, \
and a new line
Run Code Online (Sandbox Code Playgroud)

(其中\ t实际上是一个选项卡)
将提供以下提交消息:

This commit has double spaced sections. And a tab, and a new line
Run Code Online (Sandbox Code Playgroud)

所以所有的空白区域都崩溃了.

此外,如果您想输入更复杂和完整的提交消息,您可能想要完全$EDITOR省略-m.

此外,如果您立即推送每个提交,您实际上并没有真正使用分布式版本控制的强大功能.


Use*_*ess 5

新的,扩展的答案

  • 这与您要求的最接近:

    git commit -am"$*"&& git push

$ 1具体表示(空格分隔)列表中的第一个参数.

NB.我最初写的是"$ @",但是扩展为"$ 1""$ 2"...,这不是你想要的:"$*"扩展为带有所有参数的单引号字符串.

  • 简单地引用字符串可能更明智,特别是如果你关心shell扼杀空白(所以运行gm "my commit message"并使用"$1"Douglas描述的语法)

  • 如果您真的关心格式化,最好使用外部编辑器.-m完全省略参数,确保$EDITOR设置为您想要使用的内容,并查看有关git commit消息的说明.

  • 确实,尽管如果您确实关心消息的格式,那么您最好还是在编辑器中编写它。 (2认同)