如何使用一个命令登台并提交所有文件,包括新添加的文件?


425

如何使用一个命令登台并提交所有文件,包括新添加的文件?


3
令人沮丧的是,这曾经是可能的,并且是用于提交和添加任何新文件的标准语法:git commit -a但实际上,git语法已更改。它混淆了现有用户(并破坏了他们的脚本),消除了有用的功能,并替换了不必要的标志。
fijiaaron 2015年

1
git add -A上有这个副本,一个命令中的git commit?。那里的可接受答案类似于此处的可接受答案,但是建议创建一个git别名以缩短所涉及的键入(并说明如何执行此操作)。
马克·阿默里

Answers:


568

是否

git add -A && git commit -m "Your Message"

算作“单个命令”?

根据以下@thefinnomenon的答案进行编辑

要将其作为git alias,请使用:

git config --global alias.coa '!git add -A && git commit -m'

并使用以下消息提交所有文件(包括新文件):

git coa "A bunch of horrible changes"

说明(来自git add文档):

-A,--all,--no-ignore-removal

不仅在工作树具有文件匹配的位置,而且在索引已经具有条目的位置,都更新索引。这将添加,修改和删除索引条目以匹配工作树。

如果<pathspec>在使用-A选项时未指定任何值,则将更新整个工作树中的所有文件(旧版本的Git用于将更新限制为当前目录及其子目录)。


3
提交消息呢?
Narendra Jaggi'7

11
@NarendraJaggi git add -A && git commit -m“您的消息”
Dr.jacky '16

1
可以将其放在自己的.sh或.bat文件中,并将其用作一个命令。消息可能是param1
BlueWizard

另外,您还可以在.bashrc中添加基本git命令的快捷方式:alias gpl ='git pull'alias gps ='git push'alias gc ='git commit'alias gs ='git status'alias gd ='git diff'别名ga ='git add'别名gck ='git checkout'别名gb ='git branch'别名gl ='git log'别名lcp ='git format-patch -1 HEAD'别名resetToMaster ='git reset --hard origin /
master'– ni3

3
在Powershell中,将“ &&”替换为“;” 运行两个命令,如下所示:git add -A ; git commit -m "Your Message"
Rafael Miceli

415

该命令将添加并提交所有修改的文件,而不是新创建的文件

git commit -am  "<commit message>"

从man git-commit:

   -a, --all
       Tell the command to automatically stage files that have been modified
       and deleted, but new files you have not told Git about are not
       affected.

101
这实际上并不能解决问题,实际上(至少以粗体显示)专门排除了所寻求解决方案的关键部分之一。
阿鲁纳斯2015年

6
不添加或提交未跟踪的文件。
2016年

3
但是它涵盖了在“ git add -A”之后提交并注意到您忘记更改一些小的代码时的最典型情况。我讨厌从头开始多次写同一条提交消息
KorbenDallas

但是线程启动器说的是“所有文件”,所以,我认为这一点不算在内
Frederick G. Sandalo

另外,您还可以在.bashrc中添加基本git命令的快捷方式:alias gpl ='git pull'alias gps ='git push'alias gc ='git commit'alias gs ='git status'alias gd ='git diff'别名ga ='git add'别名gck ='git checkout'别名gb ='git branch'别名gl ='git log'别名lcp ='git format-patch -1 HEAD'别名resetToMaster ='git reset --hard origin /
master'– ni3

26

我使用此功能:

gcaa() { git add --all && git commit -m "$*" }

在我的zsh配置文件中,所以我可以这样做:

> gcaa This is the commit message

自动登台并提交所有文件。


1
像bash一样function gcaa() { git add --all && git commit -m "$*" && git push }
Damilola '18

1
@Damilola- 像bash一样是什么意思?答案中的语法也适用于bash
Eliran Malka,

很好,我以前使用过别名,gaa && gc -m "my commit"但是这样好得多... <
匆匆忙忙


24

不知道为什么这些答案都围绕着我认为是正确的解决方案,但是对于这里值得的是我所使用的:

创建一个别名:

git config --global alias.coa '!git add -A && git commit -m'

添加所有文件并提交以下消息:

git coa "A bunch of horrible changes"

注意:coa是全部提交的缩写,可以用您内心渴望的任何东西替换


1
除此之外,没有其他答案可以成功地简化通过消息提交所有内容的过程。
Seph Reed

2
这很棒,正在寻找git alias方法,其余的很无聊。
Qortex

9

提交git可以是多步过程,也可以是一个步骤,具体取决于情况。

  1. 在这种情况下,您需要更新多个文件并想要提交:

    您必须先添加所有已修改的文件,然后才能提交任何内容。

    git add -A
    

    要么

    git add --all
    
  2. 之后,您可以使用commit所有添加的文件

    git commit
    

    为此,您必须添加此提交的消息。


6

如果只希望“快速而肮脏”的方式将更改存储在当前分支上,则可以使用以下别名:

git config --global alias.temp '!git add -A && git commit -m "Temp"'  

运行该命令后,您可以键入git tempgit自动将所有更改作为名为“ Temp”的提交自动提交到当前分支。然后,您可以git reset HEAD~稍后使用“取消提交”更改,以便您可以继续进行更改,或者git commit --amend为提交添加更多更改和/或为其指定适当的名称。


4

我的配置中有两个别名:

alias.foo=commit -a -m 'none'
alias.coa=commit -a -m

如果我太懒了,我只需提交所有更改

git foo

并做一个快速提交

git coa "my changes are..."

coa代表“全部提交”


9
我不喜欢使用一个充满提交消息“ none”的存储库,在此基础上,我也会拒绝任何PR。不幸的是,要了解拥有良好提交消息的重要性的唯一方法是,当您不得不回头审计很久以前写的东西时(“此行导致了一个错误……为什么还要添加它,并且会如果我更改/删除它会中断吗?”)。
gregmac

1
提交“ none”绝不会停留太长时间。通常,我会启动自己的功能分支,进行微提交,然后在合并之前将其压缩为更合理的内容。显然,为每个修改的功能提交内容并且不介意完整的git日志的人都不需要这样做。
SystematicFrank 2015年

1
为此,我使用“ wip”(“进行中的工作”的缩写)代替“ none”,并且仅将此类提交推送到我的私人分支机构。
SergejKoščejev'16

它仍然无济于事,因为最终那些“ wip”或“ none”的提交将使其进入其他人可以看到的分支,并污染消息日志。如果您在推送之前压榨所有提交,那么这是可以接受的,但对于团队来说仍然很烦人。
约旦

这是一个g回的主意,通过将其与下一个答案结合,您实际上可以为OP获得100%准确的答案。我实际上在答案中概述了必要的步骤(使用git-bash)。(stackoverflow.com/a/43442269/869239
VERO

3

运行给定的命令

git add . && git commit -m "Changes Committed"

但是,即使它看起来像是一个命令,还是两个单独的命令一个一个地运行。在这里,我们只是用来&&组合它们。它git add .git commit -m "Changes Committed"单独运行并没有太大区别 。您可以一起运行多个命令,但是顺序很重要。如果您想将更改与登台和提交一起推送到远程服务器,如何按照给定的方式进行操作,

git add . && git commit -m "Changes Committed" && git push origin master

相反,如果您更改顺序并将其push放在首位,它将首先执行,并且在暂存和提交后不会给出所需的推送,仅是因为它已先运行。

&&运行线路上的第二命令时,所述第一命令回来成功,或具有0的相对误差级&&IS||当第一个命令不成功或错误级别为1时运行第二个命令。

或者,您可以将alise创建为git config --global alias.addcommit '!git add -a && git commit -m'并将其用作git addcommit -m "Added and commited new files"


2

很好的答案,但是如果您想找到一条单线的方法,可以进行串联,别名并享受便利:

git add * && git commit -am "<commit message>"

它是一行,但是只有两个命令,并且如上所述,您可以为这些命令起别名:

alias git-aac="git add * && git commit -am " (末尾的空格很重要),因为您将参数化新的简写命令。

从这一刻起,您将使用以下别名:

git-acc "<commit message>"

您基本上是说:

git,为我添加所有未跟踪的文件,并使用此给定的提交消息提交它们。

希望您使用Linux,希望对您有所帮助。


0

您可以编写一个小脚本(请看Ian Clelland的答案)git-commitall,该脚本使用几个git命令执行您想要执行的操作。
将此脚本放置在的任何位置$PATH。您可以用git commitall... 来称呼它,非常方便!

此处找到(问题和所有答案不幸地被删除,只有具有很高的声誉才能看到)


整个主题读得很好...这就是为什么我将其链接^^
tanascius

@Dimitri-不幸的是,一些学习过的人决定删除此有用的线程。它仍然以高声誉可见,因此我将链接保留在这里。
tanascius

0

尝试使用:

git add . && git commit -m "your message here"
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.