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

时间:2011-10-21 16:04:41

标签: 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
}

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

gm My_Message

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

gm This is my message

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

4 个答案:

答案 0 :(得分:7)

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

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

gm "This is my message"

另一种方法是:

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

gm This is my message

但这意味着:

gm This commit  has double  spaced sections.\t And a tab, \
and a new line

(其中\ t实际上是一个标签)
将提交以下提交消息:

This commit has double spaced sections. And a tab, and a new line

所以所有的空白区都崩溃了。

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

此外,如果您立即推送每次提交,那么您并没有真正使用分布式版本控制的强大功能。

答案 1 :(得分:5)

新的,扩展的答案

  • 这与您的要求最接近:

    git commit -am“$ *”&& git push

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

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

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

    < / LI>
  • 如果真的关心格式化,最好使用外部编辑器。只需完全省略-m参数,确保将$EDITOR设置为您要使用的内容,然后查看此note about git commit messages

答案 2 :(得分:3)

恕我直言,更好的方法是:

git config --global alias.acp '!f() { git add -A && git commit -m "$@" && git push; }; f'

将为本机git命令设置名为acp的别名。

现在您可以轻松运行git acp "commit messages here!"

答案 3 :(得分:0)

您可以使用引号封装单词,例如gm "this is my message"