【问题标题】:Git add and commit in one commandGit 在一个命令中添加和提交
【发布时间】:2010-11-28 20:40:39
【问题描述】:

有什么办法吗

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 不添加。有什么作用?

【问题讨论】:

  • 节省时间并提交每个更改会更好,所以我使用 git commit -am "yes the code in committed"
  • git add . 是一个更快的添加所有选项
  • git add -A 甚至更糟糕的是,git add . 都是有害的,不应在绝大多数情况下使用。您希望 git add -pgit add -i 真正考虑您正在登台的内容。

标签: git


【解决方案1】:

你可以使用 git 别名,例如

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

并与它一起使用

git add-commit -m 'My commit message'

编辑: 恢复为记号 ('),否则它将在 Linux 上进行 shell 扩展失败。 在 Windows 上,应该使用 双引号 (") 代替(在 cmets 中指出,未验证)。

【讨论】:

  • 使用git config --global --unset alias.<your_alias> 取消设置别名。
  • @MrFusion 它使命令成为外部shell命令而不是内部git命令的快捷方式,即使整行作为单独的进程执行。
  • 我更喜欢git config --global alias.add-commit '!git add -A && git commit -m',所以我不必每次都输入-m
  • 我懒得每次都输入'add-commit'和'-m'。因此,我输入:git config --global alias.ac '!git add -A && git commit -m' 一次,每次我只输入:git ac 'comment' :)
  • git config --global alias.add-commit "!git add -A && git commit"(即双引号而不是单引号)适用于 Windows。
【解决方案2】:
git commit -am "message"

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

git add .
git commit -m "message"

是添加所有新文件或修改文件的简单方法。此外,包罗万象的资格适用。以上命令不会删除没有git rm命令删除的文件。

git add app
git commit -m "message"

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

【讨论】:

  • 或只是git commit -am "message" - 只需确保没有 git 尚未拾取的新文件。否则你需要在前面使用git add . &&....在一行中完成。
  • 对不起,最初的问题正是关于这个 - 避免git add .以防添加文件
【解决方案3】:

要将其保留在一行中,请使用:

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

这一行会将所有更改和添加的文件添加并提交到存储库。

【讨论】:

  • 应该注意这是特定于 Linux shell(bash 和可能的其他)。
  • git commit -am "comment" 完美
  • 如果你使用了:git add .那么你不需要使用选项-a,只需要:git commit -m "comment"
【解决方案4】:

你能做的最简单的就是:

git commit -am "Your commit message"

我不明白我们为什么要这么麻烦。

【讨论】:

  • 解决方案已经在 J​​ed Schneider 的回答中给出:stackoverflow.com/a/4298990/2227743
  • 哦,长度让我感到困惑,但值得一读。谢谢@EricAya
  • 这不会添加新文件。 a 用于all,而不是add
  • 嗨@tymtam,此命令将所有跟踪的文件添加到暂存区并使用给定的消息提交。使用命令 git add -A 将未跟踪的文件添加到暂存区。
  • 但如果您创建了另一个文件,此命令将失败。仅当您将该文件推送到存储库后,它才会起作用。
【解决方案5】:

只为 linux bash 调整 Ales's 答案和 courtsimas's 评论:

要将其保留在一行中,请使用:

git commit -am "comment"

这一行会将所有更改添加并提交到存储库。

只要确保没有 git 尚未获取的新文件。否则你需要使用:

git add . ; git commit -am "message"

【讨论】:

  • 怎么办git commit -am "comment",但只针对1个文件?假设 file.txt.
  • git commit -am "comment" 是添加和提交所有更改文件的快捷方式。如果您只想添加和提交 1 个文件,则需要执行:git add file.txt ; git commit -m "comment"
  • 第二种情况,不需要在m后面加上-a。应该是 git add 。 ; git commit -m "消息"
【解决方案6】:

只需组合你的命令:

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

【讨论】:

    【解决方案7】:

    在以后的git版本中可以像这样添加和提交

    git commit -a -m "commit message"
    

    另外你一个别名:

    [alias]
        ac = commit -a -m
    

    那么你可以这样使用它:

    git ac "commit message"
    

    【讨论】:

    • 此命令不会提交新文件,只会提交更新的文件。
    【解决方案8】:

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

    • 创建/定位您的.bashrc - refer SO thread
    • 将以下行添加到文件中

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

      它确实 git add commit 和 push 。以任何方式调整它,比如你不希望 push 命令删除该部分

    • 重新加载.bashrc/关闭并重新打开你的shell

    • 现在您可以使用gacp 命令完成整个过程。

    【讨论】:

    • 仅供参考,该脚本中有一个git push。不要复制粘贴。
    【解决方案9】:

    很确定你可以使用:

    git commit -am "commit all the things"
    

    【讨论】:

    • 此命令是实现所需结果的最短且可能最简单的方法。在 git 版本 2.6.3.windows.1 上测试。
    • 这不会提交新添加的文件,只会提交“更新”的文件!
    • 正确它不会开始跟踪未跟踪的文件
    • @BlairAnderson - 是否有一个命令可以通过 add 和 commit 添加未跟踪的文件?
    【解决方案10】:

    我希望这对某人有所帮助,请随时编辑或改进。我不确定 最快 的方式是什么,但这无疑通过为 Git 使用 "ohmyzsh" 来简化我的代码提交过程

    https://ohmyz.sh/

    • git add . 缩短为 ga .
    • git commit -m "message" 缩短为 gc -m "message"
    • git push 缩短为 gp
    • git fetch 缩短为 gf
    • git pull origin master 缩短为 ggl master
    • git push origin master 缩短为 ggp master
    • git checkout -b 缩短为 gcb
    • git merge 缩短为 gm
    • git remote 缩短为 gr
    • git status 缩短为 gst

    【讨论】:

    • 用户注意: 这在技术上并不局限于 git ...这个答案适用于允许使用预测性“模糊搜索”输入命令的通用工具的行为样式数据输入,适用于在命令行输入的所有命令,而不仅仅是 git 命令。
    【解决方案11】:

    只需使用:

    git commit -m "message" .     
    

    注意“。”最后...也可以是文件/目录的路径

    【讨论】:

    • 这适用于新创建的文件还是仅适用于已更改的现有文件?
    • 这仅适用于已跟踪的文件。
    【解决方案12】:

    我的 .bash_profile.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"
    }
    

    【讨论】:

      【解决方案13】:

      如果你输入:

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

      一次,你只需要输入

      git a
      

      每次:

      git a 'your comment'
      

      【讨论】:

      • 这应该是最佳答案,超级简单,并且与大多数其他建议不同,包括 UNTRACKED 文件。
      【解决方案14】:

      我做一个shell

      #!/bin/sh
      
      clear
      
      git add -A 
      git commit -a -m "'$*'"
      

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

      sh git.sh your commit message
      

      【讨论】:

      • 不能移植到其他操作系统,而git自己可以做到这一点,那有什么意义呢?
      • @naught101 很明显 git 可以自己做这件事,关键是这个 shell 可以简化在 linux 上使用 git 的人的过程,运行 sh git.sh 你的提交消息,而不是可移植的并不意味着它会正常工作。
      【解决方案15】:

      你可以使用-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.
      

      【讨论】:

      • -a / -all 不添加新文件
      【解决方案16】:
      1. 在 bash 中创建别名: alias gac="git add -A && git commit -m"

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

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

      【讨论】:

        【解决方案17】:

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

        # 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 Jose

        我很想在那里得到一个if else 声明,这样我就可以让 aacv 在它完成后询问我是否要部署,如果我输入“y”,我想我应该输入在我的.zshrc 文件中

        【讨论】:

          【解决方案18】:

          我为添加所有并提交使用以下别名:

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

          然后,输入:

          git ac
          

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

          【讨论】:

          • 我应该告你抄袭。 :)
          • 请解释与 Navid 明显较早的答案相比,您的答案提供的不同的额外见解。
          • @Yunnosch 我想我在发布之前没有看到 Navid 的答案,因为他“太懒惰”:P 无法将其作为完整答案发布。确实是一样的,其实我很早以前就有这个别名了,是从同事那里借来的。所以我想我们可以称之为:抄袭链。抱歉,如果打扰了您。
          【解决方案19】:

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

          git config --get-regexp alias
          

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

          // git添加

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

          // git 提交

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

          // git commit -m

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

          // git 添加提交

          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'
          

          【讨论】:

          • 喜欢这些选择。你甚至可以添加git config --global alias.acmp '!git add -A && git commit -m "update" && git push'
          【解决方案20】:

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

          #!/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 并提交单个文件:

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

          【讨论】:

            【解决方案21】:

            对于习惯于 Subversion 之类的人群中的银背......在这个词的旧意义上做一个“提交”(即 - 或在 git speak 中 - 添加,提交和推送)在一个步骤中,我通常在我的项目的根目录中添加类似以下内容(作为 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.
            

            【讨论】:

              【解决方案22】:

              有人说git commit -am 可以解决问题。这不起作用,因为它只能提交对跟踪文件的更改,但不会添加新文件。 Source.

              经过一些研究,我发现没有这样的命令可以执行此操作,但您可以根据您的操作系统在 .bashrc.bash_profile 上编写脚本。

              我将分享我使用的那个:

              function gac {
                if [[ $# -eq 0 ]]
                  then git add . && git commit
                else
                  git add . && git commit -m "$*"
                fi
              }
              

              您的所有更改都将被添加并提交,您只需输入gac,系统将提示您编写提交消息

              或者你可以直接输入你的提交信息gac Hello world,你的所有更改都会被添加并且你的提交信息将会是Hello world,注意""没有被使用

              【讨论】:

                【解决方案23】:

                我使用这个 git 别名:

                git config --global alias.cam '!git commit -a -m '

                所以,而不是调用

                git add -A &amp;&amp; git commit -m "this is a great commit"

                我只是这样做:

                git cam "this is a great commit"

                【讨论】:

                  【解决方案24】:

                  你可以使用 git commit -am "[comment]" // 最佳解决方案 要么 混帐添加。 && git commit -m "[评论]"

                  【讨论】:

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

                    【讨论】:

                    • 我投了反对票,因为这是一个非常奇怪的解决方案,一旦您的历史记录到期并且第 543 个命令变成其他东西,它可能会以可怕的方式破坏事情。
                    【解决方案26】:

                    This Result - 试试这个: git add、git commit 和 git push 的简单脚本一个命令

                    在 Windows 上打开您的 CMD 并粘贴此答案

                    git commit -m "your message" . &amp;&amp; git push origin master

                    这个例子我的图片截图: https://i.stack.imgur.com/2IZDe.jpg

                    【讨论】:

                      【解决方案27】:

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

                      gacm "your comment"
                      

                      【讨论】:

                      • 你能提供一些关于这个或链接的背景吗?
                      • 我认为这张海报正在使用别名并且没有意识到这一点。要完成上述工作,您需要添加一个 shell 别名,如 alias gacm="git add .; git commit -m" 或(最好我认为)一个 git 别名,如 git config --global alias.gacm '!git add .;git commit -m'
                      猜你喜欢
                      • 1970-01-01
                      • 2014-12-11
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-08-19
                      • 1970-01-01
                      • 2018-03-17
                      • 1970-01-01
                      • 2013-01-18
                      相关资源
                      最近更新 更多