Git在一个命令中添加并提交


392

有什么办法可以做吗

git add -A
git commit -m "commit message"

在一个命令中?

我似乎经常执行这两个命令,如果Git有一个类似的选项git commit -Am "commit message",它将使生活变得更加便捷。

git commit具有-a修饰符,但其功能与git add -A提交之前完全不同。git add -A添加新创建的文件,但git commit -am不添加。什么事



1
节省时间并提交每个更改都更好,所以我正在使用git commit -am"yes the code in committed"
Rizo

git add .是添加所有内容的更快选择
Ryan

Answers:


419

您可以使用git别名,例如

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

并与

git add-commit -m 'My commit message'

编辑:恢复到刻度('),否则它将在Linux上进行Shell扩展失败。在Windows上,应该使用双引号(“)代替(注释中指出,未验证)。


24
使用git config --global --unset alias.<your_alias>取消设置别名。
TMOTTM 2013年

11
@MrFusion它使命令成为外部Shell命令,而不是内部git命令中的快捷方式,即使整个行作为单独的进程执行。
Martin C.

8
我喜欢git config --global alias.add-commit '!git add -A && git commit -m'这样,所以我不必-m每次都键入。
白炽灯2016年

21
我太懒了,每次都不能输入“ add-commit”和“ -m”。因此,我输入:git config --global alias.ac '!git add -A && git commit -m' 一次,每次我输入: git ac 'comment' :)
Navid Vafaei

5
git config --global alias.add-commit "!git add -A && git commit"(即双引号而不是单引号)是在Windows上起作用的。
Saheed

269
git commit -am "message"

这是告诉git删除已删除文件的简单方法,但是我通常不建议您采用这种包罗万象的工作流程。在最佳实践中,Git提交应该是相当原子的,并且只影响几个文件。

git add .
git commit -m "message"

是添加所有新文件或修改文件的简便方法。同样,适用所有条件。上面的命令不会删除没有删除的文件git rm命令。

git add app
git commit -m "message"

是将所有文件从单个目录(在本例中为appdir)添加到索引的一种简便方法。


41
或者只是git commit -am "message"-确保没有git尚未拾取的新文件。否则,您需要在此之前使用git add . &&...。
courtsimas 2012年

2
抱歉,最初的问题正好与此有关-避免git add .在添加文件的情​​况下
gorn

50

要将其保持为一行,请使用:

git add . && git commit -am "comment"

此行将添加所有已更改和已添加的文件并将其提交到存储库。


12
应该注意的是,这是特定于Linux shell(bash和其他可能的)的。
R. Martinho Fernandes

6
git commit -am "comment"完美
Abhishek Bedi

2
如果您使用过: git add . 那么您不需要使用-a选项,只需要:git commit -m "comment"
Duc Chi

18

只需结合您的命令:

git add -A && git commit -m "comment" 

18

仅针对Linux bash改编Ales的答案和Courtsimas的评论

要将其保持为一行,请使用:

git commit -am "comment"

该行将添加并提交所有更改的内容到存储库。

只要确保没有git尚未拾取的新文件即可。否则,您将需要使用:

git add . ; git commit -am "message"


怎么办git commit -am "comment",但仅适用于1个文件?假设是file.txt
Santosh Kumar,

git commit -am "comment"是添加和提交所有更改的文件的快捷方式。如果您只想添加和提交1个文件,则需要执行以下操作:git add file.txt ; git commit -m "comment"
danilo

在第二种情况下,无需将-a与m相加。应该是git add。; Git commit -m“ message”
Manish Bansal

12

在更高版本的git中,您可以像这样添加和提交

git commit -a -m "commit message"

另外,您还有一个别名:

[alias]
    ac = commit -a -m

然后,您可以像这样使用它:

git ac "commit message"

6
此命令将不提交新文件,仅提交更新文件。
ruvim '17

11

在Windows计算机上,我设置了这个.bashrc别名,以使整个过程更加简单。

  • 创建/定位您的.bashrc- 参考SO线程
  • 将以下行添加到文件

    alias gacp='echo "enter commit message : " && read MSG && git add . && git commit -m "$MSG" && git push'
    

    它确实git add commit和push。以任何方式对其进行调整,例如您不希望push命令删除该部分

  • 重新加载.bashrc/关闭并重新打开外壳

  • 现在,您可以使用gacpcommand 完成整个过程。

仅供参考,该脚本中包含一个git push。不要复制并粘贴。
Yar

11

非常确定您可以使用:

git commit -am "commit all the things"

1
此命令是获得所需结果的最短方法,可能也是最简单的方法。在git版本2.6.3.windows.1。上测试
伊萨尔

5
但是,这不会提交新添加的文件,仅提交“已更新”的文件!
user13107 '18

1
正确,它将不会开始跟踪未跟踪的文件
Blair Anderson

@BlairAnderson-是否有添加添加和提交未跟踪文件的命令?
MasterJoe2

6

如果输入:

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

一次,您只需要输入

git a

每次:

git a 'your comment'

4
这应该是最好的答案,非常容易,并且与其他大多数建议不同,它包含未跟踪的文件。
JesseBoyd


5

我做壳

#!/bin/sh

clear

git add -A 
git commit -a -m "'$*'"

保存例如git.sh并稍后调用:

sh git.sh your commit message

1
不能移植到其他操作系统,而git可以做到这一点,那又有什么意义呢?
naught101

2
@ naught101很明显git可以自己完成,关键是这个shell可以简化人们在Linux上使用git的过程,更简单地运行sh git.sh您的提交消息,而不是可移植的并不意味着它将正常工作。
ademar111190 2012年

5

我的.bash_profileor .profile或/ .zprofile或从登录shell中获取的任何内容中都有此函数:

function gac () {
  # Usage: gac [files] [message]
  # gac (git add commit) stages files specified by the first argument
  # and commits the changes with a message specified by the second argument.
  # Using quotes one can add multiple files at once: gac "file1 file2" "Message".
  git add $1 && git commit -m "$2"
}

3

你可以用 -a

git commit -h

...
Commit contents options
    -a, -all    commit all changed files
...

git commit -a # It will add all files and also will open your default text editor.

2

希望对您有所帮助,请随时进行编辑或改进。我不确定最快的方法是什么,但这肯定通过为Git使用“ ohmyzsh”简化了我的代码提交过程。

https://ohmyz.sh/

  • git add . 缩短为 ga .
  • git commit -m "message" 缩短为 gc -m "message"
  • git push 缩短为 gp

在此处输入图片说明


1

我使用以下方法(两者都在进行中,所以我会尽量记住进行更新):

# Add All and Commit
  aac = !echo "Enter commit message:" && read MSG && echo "" && echo "Status before chagnes:" && echo "======================" && git status && echo "" && echo "Adding all..." && echo "=============" && git add . && echo "" && echo "Committing..." && echo "=============" && git commit -m \"$MSG\" && echo "" && echo "New status:" && echo "===========" && git status

# Add All and Commit with bumpted Version number
  aacv = !echo "Status before chagnes:" && echo "======================" && git status && echo "" && echo "Adding all..." && echo "=============" && git add . && echo "" && echo "Committing..." && echo "=============" && git commit -m \"Bumped to version $(head -n 1 VERSION)\" && echo "" && echo "New status:" && echo "===========" && git status

随着echo "Enter commit message:" && read MSG由Sojan V何塞灵感的一部分

我很想if else在那里发表声明,这样我就可以通过aacv询问我是否要在完成后进行部署,如果我键入“ y”,则可以为我执行此操作,但是我想应该将其放入我的.zshrc文件中


1

我使用以下别名添加全部并提交

git config --global alias.ac '!git add -A && git commit -a'

然后,通过键入:

git ac

我有一个vim窗口,可以为我的提交消息获得更多的编辑工具。


我应该起诉你for窃。:)
Navid Vafaei

与Navid较旧的答案相比,请解释您的答案提供的其他不同见解。
Yunnosch

@Yunnosch我想我在发布之前没有看到Navid的答案,因为他“太懒了”:P无法将其发布为完整答案。确实是一样的,实际上我很早以前就拥有这个别名,是从同事那里借来的。所以我想我们可以这样称呼:窃链。对不起,打扰了你。
Gus

1

万一有人想为一个文件“添加并提交”,我就是这样,我创建了下面的脚本来做到这一点:

#!/bin/bash

function usage {
    echo "Usage: $(basename $0) <filename> <commit_message>"    
}

function die {
    declare MSG="$@"
    echo -e "$0: Error: $MSG">&2
    exit 1
}

(( "$#" == 2 )) || die "Wrong arguments.\n\n$(usage)"

FILE=$1
COMMIT_MESSAGE=$2

[ -f $FILE ] || die "File $FILE does not exist"

echo -n adding $FILE to git...
git add $FILE || die "git add $FILE has failed."
echo done

echo "commiting $file to git..."
git commit -m "$COMMIT_MESSAGE" || die "git commit has failed."

exit 0

我将其命名为“ gitfile.sh”,并将其添加到我的$ PATH中。然后,我可以在一个命令中为单个文件运行git add和commit:

gitfile.sh /path/to/file "MY COMMIT MESSAGE"



0

首先检查您有什么别名...

git config --get-regexp alias

如果不存在,则可以创建自己的(参考:https : //git-scm.com/book/en/v2/Git-Basics-Git-Aliases

// git add

git config --global alias.a '!git add -A'

// git commit

git config --global alias.c '!git commit'

// git commit -m

git config --global alias.cm '!git commit -m'

// git add commit

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

// git add commit -m

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

例如,如果您使用最后一个...

git acm 'My commit'

0
  1. 在bash中创建一个别名: alias gac="git add -A && git commit -m"

    (我选择将快捷方式称为“ gac”,但您不必这样做)

  2. 用它: gac 'your commit message here'


0

对于习惯于Subversion之类的人群中的白银背...在旧词中(即-或用git语言-添加,提交和推送)进行“提交”第一步,我通常在项目的根目录中添加以下内容(作为Windows中的bat文件,例如git-commit.bat)。然后,当我想添加,提交和推送时,只需输入类似git-commit "Added some new stuff",然后所有内容就会发送到远程仓库。

同样,这样,项目中的任何人都可以使用它,而不必在本地进行任何更改。

我通常也运行git config credential.helper store一次,所以运行时不需要输入uid / pwd。

::
:: add, commit, and push to git
::

@echo off
echo.
echo.
echo 
echo Doing commit...
git add -A && git commit -m %1
echo.
echo.
echo Doing push...
git push
echo.
echo.
echo Done.
echo.


-1
  1. 类型 git add . && git commit -am并输入
  2. 类型 history并输入
  3. 记住上面命令的数字,说这个数字是 543
  4. 从现在开始,对于每种提交类型,!543 "your comment here"即感叹号+数字,空格和您的评论。

4
我之所以投票,是因为这是一个非常奇怪的解决方案,一旦您的历史记录过期并且第543条命令变成了其他事情,它可能会以可怕的方式破坏事物。
bfontaine '18年


-4

要将其保持为一行,请使用:

gacm "your comment"

2
您能否为此提供一些背景或链接或其他内容?
Gershom

7
我认为此发布者正在使用别名,但没有意识到。为了使上述工作有效,您需要添加shell别名,例如alias gacm="git add .; git commit -m"或(最好是我认为)git别名,例如git config --global alias.gacm '!git add .;git commit -m'
Mere Development
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.