git一起来添加,提交和推送命令?


219

有没有一种方法可以同时使用这三个命令?

git add .
git commit -a -m "commit" (do not need commit message either)
git push

有时我只更改一个字母,CSS填充或其他内容。不过,我必须编写所有三个命令来推动更改。在许多项目中,我只是一个推动者,因此此命令非常棒!


10
您是否尝试编写Shell脚本?
保罗


我的代码有很多更改,当您仅更改CSS的填充或一个字母等时。提交消息和所有这些命令会增加很多工作。没有尝试过shell脚本。怎么做?谢谢!
Gediminas


2
如果您要对每个更改实例进行一次提交,那么您做错了。完成功能或解决错误后执行命令(这可能是一个更改)
标记

Answers:


233

以@Gavin的答案为基础:

使lazygit成为函数而不是别名使您可以向其传递参数。我已将以下内容添加到我的.bashrc(如果为Mac,则为.bash_profile):

function lazygit() {
    git add .
    git commit -a -m "$1"
    git push
}

这使您可以提供提交消息,例如

lazygit "My commit msg"

当然,您可以通过接受更多的参数(例如要推送到哪个远程位置或哪个分支)来进一步增强此功能。


10
无需重新启动,只需执行“ source .bashrc”
Sambit Tripathy

25
可以使用$*而不是$1保存引号:lazygit My commit msg
Kai Carver 2015年

16
@KaiCarver尼斯认为,但是我个人不喜欢它。它阻止您使用多个arg,并且还违反了单个字符串arg的常规约定,其中单个空格arg用引号引起来。这是我的第二天性(我会假设很多开发人员)。忽略引号感觉很脏。
btse 2015年

6
lazygit,有史以来最好的名字!
user1447414 '16

4
@btse我是一名外交人员,现在是星期五。这是使用@KaiCarver建议的函数: function dirtygit() { git add . git commit -a -m "$*" git push }
OnklMaps

83

我最终在.gitconfig文件中添加了一个别名:

[alias]
    cmp = "!f() { git add -A && git commit -m \"$@\" && git push; }; f"

用法: git cmp "Long commit message goes here"

添加所有文件,然后将注释用于提交消息并将其推送到原始位置。

我认为这是一个更好的解决方案,因为您可以控制提交消息的内容。

也可以从命令行定义别名,这会将其添加到您的.gitconfig

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

6
那正是我一直在寻找的东西!完美的工作,谢谢!我找不到完整的语法参考或命令的详细列表。到底是!f() { ... }; f做什么的?关于该行的更多解释将使答案更好。
Dmitriy Gamolin

1
@DmitriyDemir定义函数f,然后调用它。
奥利弗

真的很好。我添加git pull到开始,以便减少合并。
Burhan

1
@Oliver为什么用引号引起来?为什么会有一个感叹号?最后的f会调用函数吗?什么是“ $ @”?
菲利普·雷戈

@PhilipRego错误的Oliver:p
Oliver

53

尽管我同意韦恩·沃纳的疑问,但从技术上讲,这是一个选择:

git config alias.acp '! git commit -a -m "commit" && git push'

其中定义了一个别名,该别名运行commitpush。用作git acp。请注意,此类“ shell”别名始终从git存储库的根目录运行。

另一个选择可能是编写执行推送的提交后挂钩。

哦,顺便说一句,您确实可以将参数传递给Shell别名。如果要传递自定义提交消息,请使用:

git config alias.acp '! acp() { git commit -a -m "$1" && git push ; } ; acp'

(当然,现在,你需要给一个提交信息:git acp "My message goes here!"


@wlz我刚刚尝试过,效果很好。请注意,整个字符串都在单引号内。git自动添加了转义符(已选中git config -e)。
Tilman Vogel 2014年

抱歉,您是对的:)。我直接编辑.gitconfig文件。“已经用\转义了”。
wlz 2014年

2
为什么这不是公认的答案?它完成了所要求的。+1。
lucid_dreamer

1
在Windows上,我需要转义$ 1左右的双引号才能使其在PowerShell中运行(使用... \“ $ 1 \” ...)
DReimer

35

我认为您可能会误解git设计的工作流程。(要弄清/纠正我在评论中的意思,您不需要git add .,因为commit -a通常具有相同的目的-如果文件已经添加,则添加尚未进行的任何更改)

通常,您将执行以下操作:

# make some changes
$ git commit -a -m "Changed something"
# make some more changes
$ git commit -a -m "Changed something else"

清洗,漂洗,重复,直到完成功能X,或者您已经停下来,或者您只想让其他人看到您所做的事情。那你做

$ git push

Git不是SVN-但您似乎正在尝试使用它。你可以在文章的末尾找到一些资源在这里是一些使用的。


6
+1了解有关工作流程的说明。但是git add .git commit -a 不是同一件事
Gabriele Petronella

5
感谢您的解释,但是如果有这样的命令对那些知道自己在做什么的人,GIT不会崩溃……
Gediminas

4
@Lucas:经验丰富的程序员会告诉您,要求自动执行commit-push命令的人不知道他们在做什么。3级代码签入是有原因的(如果您使用功能分支,则为4级)。
slebetman

1
@slebetman:我没有正确解释。使用facebook应用程序,每个更改都必须部署到实时服务器,甚至用于开发。因此,我们有设置提交钩子来做到这一点。您进行更改,提交更改,然后在您的应用中查看更改。使用git,我需要添加,执行阶段然后将其推送以查看单个更改。看起来不算过分吗?
SenG 2014年

1
是的,但是您也不需要提交测试代码。您应该编写一些代码,对其进行测试,然后提交并推送。在我的经验中,传说中使用本地git commits提供某种多文件“撤消”功能的过程在传说中比实际中使用的更多。
乔·斯特劳

35

我在我的.bash_profile中使用它

gitpush() {
    git add .
    git commit -m "$*"
    git push
}
alias gp=gitpush

它像执行

gp A really long commit message

source ~/.bash_profile保存别名后不要忘记运行。


1
我真的很喜欢 ...因此已将其纳入我自己的〜/ .bash_profile;)谢谢.. +1
AO_

28

您可以使用bash脚本,设置别名来启动任何命令或命令组

git commit -am "your message" && git push 

2
如果您想将此作为答案,请添加更多有关其工作原理的评论。仅仅是代码转储的答案通常不会被很好地接受。请参阅“ 如何回答”
异端猴子

我认为这应该是正确的答案。因为它尽可能简洁地回答了这个问题。只需将其输入终端即可使用!如果您不想添加别名,则可以选择简单地创建一个textExpander扩展并通过组合键触发它。
eonist

19

在bash中设置为别名:

$ alias lazygit="git add .; git commit -a -m '...'; git push;";

称它为:

$ lazygit

(要使该别名成为永久别名,您必须将其包含在.bashrc或.bash_profile中)


您需要将别名添加到.bashrc或.bash_profile中以使其永久
Gavin 2014年

我觉得这个页面可以帮助解释:serverfault.com/questions/3743/...
加文

17

最简单的解决方案是:

git commit -a -m "commit" && git push

git add 已包含在-a参数commit中,但是如果需要,可以将它们全部连接:

git add . && git commit -a -m "commit" && git push

10

在Linux / Mac中,这个实用的选项也应该有效

git commit -am "IssueNumberIAmWorkingOn --hit Enter key
> A detail here --Enter
> Another detail here --Enter
> Third line here" && git push --last Enter and it will be there

如果您正在使用本地创建的分支,请更改git push使用git push -u origin branch_name

如果要在系统编辑器中编辑提交消息,则

git commit -a && git push 

将打开编辑器,一旦您保存了消息,它也将推送它。


8

您可以尝试gitu

第一次(必须安装节点js):

npm install -g git-upload

之后:

gitu COMMIT_MSG

一次发出这三个命令。

好处是,当您重新安装系统或在其他计算机上执行此操作时,您不必担心,无需修改文件。 这也可以在不同的平台上工作(不仅是Linux和Mac,而且还可以在Windows cmd和Windows下在命令提示符下运行powershell),只需要安装npmnodejsgit当然)即可。


6

如果已经在跟踪文件,则无需运行git add,只需编写git commit -am 'your message'

如果您不想编写提交消息,则可以考虑做类似的事情

git commit --allow-empty-message -am ''



3

答案所述,您可以创建一个git别名并为其分配一组命令。在这种情况下,它将是:

git config --global alias.add-com-push '!git add . && git commit -a -m "commit" && git push'

并与

git add-com-push

1
这不会为之前的任何答案添加任何内容。
2015年

对不起,你说得对。我想我没有注意到Tilman Vogel的答案和我的答案相同。我应该删除它吗?
cristianzamar

3

用下面几行写一个名为gitpush.sh的小脚本,并将其添加到〜目录。

echo $1
git add .
git commit -m "$1"
git push

现在在〜/ .bashrc中添加一个别名,如下所示:

alias gitpush='~/gitpush'

现在,从任何git存储库中只需编写gitpush“ message”即可。


2

我使用一个批处理文件:

@ECHO OFF
SET /p comment=Comment:
git add *
git commit -a -m "%comment%"
git push

如果您从命令行接受args,则probs会更容易。我只是去“ lezygit消息”等。它很酷!
John Hon

1

上面的脚本存在一些问题:

shift“删除”参数$ 1,否则,“ push”将读取它并“误解”。

我的提示:

git config --global alias.acpp'!git add -A && branchatu =“ $(git symbolic-ref HEAD 2> / dev / null)” && branchatu = $ {branchatu ## refs / heads /} && git commit- m“ $ 1” && shift && git pull -u origin $ branchatu && git push -u origin $ branchatu'


1

当您想要git commit的svn行为时,请在.gitconfig的git别名中使用它

commit = "!f() { git commit \"$@\" && git push; };f"


1

如果您使用的是鱼壳(基于btse的答案):

将此文件另存为“〜/ .config / fish / functions”中的“ quickgit.fish”。如果目录不存在,请创建它。'--git-dir = $ PWD / .git'确保我们对调用函数的git项目运行git命令

function quickgit # This is the function name and command we call
    git --git-dir=$PWD/.git add . # Stage all unstaged files
    git --git-dir=$PWD/.git commit -a -m $argv # Commit files with the given argument as the commit message
    git --git-dir=$PWD/.git push # Push to remote
end

重新启动终端,导航到项目,进行更改,现在您可以调用“ quickgit“示例消息”“。现在将添加,提交和推送更改:)。

也可以在这里找到要点:https : //gist.github.com/Abushawish/3440a6087c212bd67ce1e93f8d283a69


1

已经有很多好的解决方案,但是对于我的工作方式,我发现以下解决方案更加优雅:

我在名为“ git-put”的路径中放置了一个脚本,该脚本包含:

#!/bin/bash
git commit "$@" && git push -u

这使我可以运行:

git put -am“我的提交消息”

..添加所有文件,提交并推送。

(我也添加了“ -u”,因为无论如何我都喜欢这样做,即使它与该问题无关。它可以确保始终为提取设置上游分支。)

我喜欢这种方法,因为它还允许使用“ git put”而不添加所有文件(跳过“ -a”),或者使用我可能希望传递以提交的任何其他选项。另外,“ put”是“ push”和“ commit”的简短组合


1

如果您使用VSCode,则可以下载扩展名,从而可以通过一个简单的键盘快捷键进行操作。


1

如果您使用的是Mac:

  1. 启动终端键入“ cd〜/”以转到您的主文件夹

  2. 键入“ touch .bash_profile”以创建新文件。

  3. 使用您喜欢的编辑器编辑.bash_profile(或者您可以键入“ open -e .bash_profile”以在TextEdit中将其打开)。

  4. 将以下内容复制并粘贴到文件中:

function lazygit() {
    git add .
    git commit -a -m "$1"
    git push
}

之后,重新启动终端,然后简单地添加,提交和推送一个简单的命令,例如:

lazygit "This is my commit message"

1

对于MAC VSC用户,最佳设置是:

1)按“ shift + cmd + P”并输入:

Shell Command: install 'code' command in PATH

按ENTER键(这将安装代码命令以轻松访问bash_profile)

2)现在可以运行:code ~/.bash_profile打开空的bash_profile

3)在其中输入新功能:

function lazygit() {
    git add .
    git commit -m "$*"
    git push
}

4)现在重新启动VSC

5)进行更改,保存并键入lazygit message以同时运行三个命令


1

对于macOS用户:

  1. 打开您的终端机iTerm2或您使用的另一个终端机。

  2. 使用命令移到您的用户配置文件文件夹~/。这是文件的默认文件夹.bash_profile

用户文件夹示例

  1. 键入nano .bash_profile此命令将.bash_profile在最易于使用的文本编辑器-终端中打开文档(如果尚不存在,则创建文档)nano

  2. 现在,您可以对文件进行简单的更改。粘贴以下代码行以更改终端提示:

function lazygit() {
    git add .
    git commit -a -m "$1"
    git push
}

纳米文字编辑

  1. 现在,通过输入内容保存更改,ctrl + o然后按回车键进行保存。然后nano输入退出ctrl + x

  2. 现在,我们需要激活您的更改。输入source .bash_profile(或. ~/.bash_profile)并观察您的提示更改。

  3. 在iTerm2中,Preferences/Profiles/General/CommandLogin Shell和设置Send text at startsource ~/.bash_profile。因此,您无需在每个macOS重新启动后手动进行设置。 iTerm 2首选项

凭证:https : //natelandau.com/my-mac-osx-bash_profile


0

我为命令做了这个.sh脚本

#!/bin/sh
cd LOCALDIRECTORYNAME/  
git config --global user.email "YOURMAILADDRESS"
git config --global user.name "YOURUSERNAME"
git init
git status
git add -A && git commit -m "MASSAGEFORCOMMITS"
git push origin master

0

由于该问题未指定哪个shell,因此这是基于先前答案的eshell版本。这放在eshell别名文件中,该文件可能在〜/ .emacs.d / eshell / alias中,我在第一部分中添加了z https://github.com/rupa/z/ 这让我们可以快速cd到一个目录,因此无论您当前的目录是什么,都可以运行它。

alias census z cens; git add .; git commit -m "fast"; git push

0

添加在~/.bash_profile添加,提交和使用一个命令放推动:

function g() { git commit -a -m "$*"; git push; }

用法:

g your commit message
g your commit message 'message'

尽管您不能在提交消息中使用分号或括号,但也不需要引号(允许使用单引号)。如果您想使用其中任何一个,只需在消息中加上双引号即可,例如:

g "your commit message; (message)"

要在您的消息中创建评论,请执行以下操作:

g "your commit message:
> your note"

还有一个用于以类似方式添加和提交的功能:

function c() { git add --all; git commit -m "$*"; }

g功能完全相同,并且具有相同的约束。只是放c。例如

c your commit message

您还可以添加别名以推送到遥控器:

alias p='git push'

用法:

p

这相当于为2个字母,c以及p你与你的Git仓库中工作时使用。或者你可以使用g只用一个字母来完成所有操作。

别名和功能的完整列表:https : //gist.github.com/matt360/0c5765d6f0579a5aa74641bc47ae50ac


0

基于lazygit答案,以下解决方案在推送之前添加了用户检查以验证更改。如果取消,它将还原命令。并且所有这些都将在且仅当本地存储库发生更改时发生。

### SAFER LAZY GIT
function lazygit() {
  git add .
  if git commit -a -m "$1"; then
    read -r -p "Are you sure you want to push these changes? [y/N]} " response
    case "$response" in
      [yY][eE][sS]|[yY])
        git push
        ;;
      *)
        git reset HEAD~1 --soft
        echo "Reverted changes."
        ;;
    esac
  fi
}

0

这对于命令分组是完美的。

分组命令

{清单; }在大括号之间放置命令列表会导致该列表在当前shell上下文中执行。没有创建子外壳。以下列表是分号(或换行符)。

legit(){ git add --all; git commit -m "$1"; git push origin master; }
legit 'your commit message here'

1
如果提交消息之间有空格,则此方法将不起作用
Rohit

0

我喜欢运行以下命令:

git commit -am "message";git push

我认为;应该&&在您的命令中替换,因为git push只有在前一个命令没有错误的情况下,后者才会执行命令。
汤姆(Tom)

0

我发现这个 yolo别名非常棒,甚至在我很懒的时候甚至可以对提交内容随机提交评论。开箱即用的效果真的很好,所以我就这样做了git yolo,所有更改都会自动推送。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.