【问题标题】:How to add multiple files to Git at the same time如何将多个文件同时添加到 Git
【发布时间】:2013-11-03 18:16:39
【问题描述】:

这将是我第一次使用 git。我已将新文件(很多)添加到文件夹/项目(git 本地存储库)中。

我浏览了在线教程和论坛,发现我能做到

git commit -a

所以我去存储库的基本文件夹并做一个

sudo git commit -a

然后,一些屏幕出现并要求我添加评论,我这样做了。我不知道如何继续或退出。我不想搞砸所以我按 ctrl + Z 并没有做任何事情。

你们能概括一下我需要使用的命令吗?

git commit -a 

git push?

【问题讨论】:

  • git commit -a 打开一个编辑器供您输入提交信息。输入您希望作为日志查看的消息并退出编辑器。这样就完成了提交。通过使用git push <remote name> <branch name>(例如git push remote master)将更改推送到远程存储库来跟进
  • 另请注意,您不需要(也不应该)使用sudo
  • 感谢您的回复。如果我不使用 sudo,则会出现权限被拒绝错误。
  • 之前使用过 sudo,您的工作目录中可能有文件现在被错误地归 root 拥有。此时进行其他操作没有 sudo 将导致权限被拒绝错误,因为您无法更改root 拥有的那些文件。您的存储库可能有点乱,最好重新开始(并且不要使用 sudo)。
  • 如果你想添加所有文件,你可以使用`git add -a`。但是如果你想添加多个选定的文件。你可以使用 `git add -i' 。请参考这个git-scm.com/book/en/v2/Git-Tools-Interactive-Staging。这会对你有所帮助。

标签: git push commit


【解决方案1】:

我使用命令:git add *CMakeLists.txt,以便跨子目录添加所有 CmakeLists.txt 文件:

z:\Temp\proj_I2.21.09.24\CMakeLists.txt
z:\Temp\proj_I2.21.09.24\tools\t1\src\CMakeLists.txt
z:\Temp\proj_I2.21.09.24\tools\TAF\VV\CMakeLists.txt
z:\Temp\proj_I2.21.09.24\tools\TAF\Executable\CMakeLists.txt
z:\Temp\proj_I2.21.09.24\tools\TAF\Recording\CMakeLists.txt
z:\Temp\proj_I2.21.09.24\Design\original\CMakeLists.txt

【讨论】:

    【解决方案2】:

    使用git add 命令,后跟以空格分隔的文件名列表。如果在其他目录中,则包括路径,例如directory-name/file-name.

    git add file-1 file-2 file-3
    

    (请注意文件名区分大小写,必须包含“.extension”)

    【讨论】:

    • 当文件名之一包含 git 1.9.5 的空格时,这不起作用
    • 对我很有帮助
    • 这对我很有帮助;谢谢。
    【解决方案3】:

    试试这个:

    git add file1
    git commit file1
    git push 
    git add file2
    git commit file2 --amend
    git push 
    

    注意:不带 -m 选项的 git commit 将为您的提交消息打开一个编辑器。

    【讨论】:

      【解决方案4】:

      添加您所做的所有更改:

      git add .
      

      添加单个文件夹:

      git add directory path
      

      添加多个文件夹:

      git add folder1 folder2 folder3 foldern
      

      提交所有更改:

      git commit -m "message"
      

      要将已提交的更改从本地存储库推送到远程存储库:

      git push origin branch name
      

      【讨论】:

      • 只想添加通配符被接受:git add *.py 添加所有 python 文件。
      【解决方案5】:

      只需在每个文件名周围使用单引号,以确保任何带空格的文件都能按预期工作

      git add 'file1' 'file2' 'file3' 
      

      【讨论】:

        【解决方案6】:

        ?步骤1

        git init
        

        ?第二步。

        a) 适用于所有文件

        git add -a
        

        b) 仅特定文件夹

        git add <folder1> <folder2> <etc.>
        

        ?第三步。

        git commit -m "Your message about the commit"
        

        ?第四步。

        git remote add origin https://github.com/yourUsername/yourRepository.git
        

        ?步骤5

        git push -u origin master
        git push origin master
        

        如果您遇到此错误而不是

         ! [rejected]        master -> master (fetch first)
        error: failed to push some refs to 'https://github.com/harishkumawat2610/Qt5-with-C-plus-plus.git'
        hint: Updates were rejected because the remote contains work that you do
        hint: not have locally. This is usually caused by another repository pushing
        hint: to the same ref. You may want to first integrate the remote changes
        hint: (e.g., 'git pull ...') before pushing again.
        hint: See the 'Note about fast-forwards' in 'git push --help' for details.
        

        ?使用这个命令

        git push --force origin master
        

        【讨论】:

          【解决方案7】:

          如果您想在 Github 上暂存和提交所有文件,请执行以下操作;

          git add -A                                                                                
          git commit -m "commit message"
          git push origin master
          

          【讨论】:

            【解决方案8】:

            如果您想在给定文件夹中添加多个文件,您可以使用{,} 拆分它们。这对于不重复长路径来说太棒了,例如

            git add long/path/{file1,file2,...,filen}
            

            注意不要在, 之间放置空格。

            【讨论】:

            • 这里的长/路径/是什么? @EliuX
            • long/path 可能是一个长度很长的路径字符串,所以不重复这样的部分会更舒服,而不必cd进入它
            【解决方案9】:

            正如一些人提到的,一种可能的方法是使用git interactive staging。 当您拥有具有不同扩展名的文件时,这很棒

            $ git add -i
                       staged     unstaged path
              1:    unchanged        +0/-1 TODO
              2:    unchanged        +1/-1 index.html
              3:    unchanged        +5/-1 lib/simplegit.rb
            
            *** Commands ***
              1: status     2: update      3: revert     4: add untracked
              5: patch      6: diff        7: quit       8: help
            What now>
            

            如果您按2,然后按enter,您将获得要添加的可用文件列表:

            What now> 2
                       staged     unstaged path
              1:    unchanged        +0/-1 TODO
              2:    unchanged        +1/-1 index.html
              3:    unchanged        +5/-1 lib/simplegit.rb
            Update>>
            

            现在您只需插入要添加的文件数量,因此如果我们要添加TODOindex.html,我们将输入1,2

            Update>> 1,2
                       staged     unstaged path
            * 1:    unchanged        +0/-1 TODO
            * 2:    unchanged        +1/-1 index.html
              3:    unchanged        +5/-1 lib/simplegit.rb
            Update>>
            

            你看到号码前的*了吗?这意味着该文件已添加。

            现在假设您有 7 个文件,并且您想要添加除第 7 个之外的所有文件?当然我们可以输入1,2,3,4,5,6,但是想象一下我们有16个而不是7,那会很麻烦,好在我们不需要输入它们,因为我们可以使用范围,通过输入1-6

            Update>> 1-6
                       staged     unstaged path
            * 1:    unchanged        +0/-1 TODO
            * 2:    unchanged        +1/-1 index.html
            * 3:    unchanged        +5/-1 lib/simplegit.rb
            * 4:    unchanged        +5/-1 file4.html
            * 5:    unchanged        +5/-1 file5.html
            * 6:    unchanged        +5/-1 file6.html
              7:    unchanged        +5/-1 file7.html
            Update>>
            

            我们甚至可以使用多个范围,所以如果我们想要从 1 到 3 以及从 5 到 7,我们输入1-3, 5-7

            Update>> 1-3, 5-7
                       staged     unstaged path
            * 1:    unchanged        +0/-1 TODO
            * 2:    unchanged        +1/-1 index.html
            * 3:    unchanged        +5/-1 lib/simplegit.rb
              4:    unchanged        +5/-1 file4.html
            * 5:    unchanged        +5/-1 file5.html
            * 6:    unchanged        +5/-1 file6.html
            * 7:    unchanged        +5/-1 file7.html
            Update>>
            

            如果我们输入-number,我们也可以使用它来取消暂存文件,因此如果我们想取消暂存文件编号1,我们将输入-1

            Update>> -1
                       staged     unstaged path
              1:    unchanged        +0/-1 TODO
            * 2:    unchanged        +1/-1 index.html
            * 3:    unchanged        +5/-1 lib/simplegit.rb
              4:    unchanged        +5/-1 file4.html
            * 5:    unchanged        +5/-1 file5.html
            * 6:    unchanged        +5/-1 file6.html
            * 7:    unchanged        +5/-1 file7.html
            Update>>
            

            您可以想象我们也可以取消暂存一系列文件,因此如果我们输入-range,该范围内的所有文件都将取消暂存。如果我们想取消从 5 到 7 的所有文件,我们可以输入 -5-7

            Update>> -5-7
                       staged     unstaged path
              1:    unchanged        +0/-1 TODO
            * 2:    unchanged        +1/-1 index.html
            * 3:    unchanged        +5/-1 lib/simplegit.rb
              4:    unchanged        +5/-1 file4.html
              5:    unchanged        +5/-1 file5.html
              6:    unchanged        +5/-1 file6.html
              7:    unchanged        +5/-1 file7.html
            Update>>
            

            【讨论】:

            • 我个人喜欢这种方式。当您有更多文件要提交和其他操作时,它很容易使用。
            • 一旦你结束了,你如何完成交互式的登台?
            • @Crparedes 添加文件后,如果再次按回车键将返回菜单,那么您必须选择选项 7 以退出交互式暂存。
            【解决方案10】:

            你也可以像这样选择多个文件

            git add folder/subfolder/*
            

            这将添加指定子文件夹中的所有文件。当您编辑一堆文件但您只想提交其中一些文件时非常有用...

            【讨论】:

            • 为我节省了 10 秒 + 未来数千秒
            【解决方案11】:

            添加您所做的所有更改:

            git add .

            提交它们:

            git commit -m "MY MESSAGE HERE"#-m 是消息标志

            你可以像这样把这些步骤放在一起:

            git commit -a -m "MY MESSAGE HERE"

            要将已提交的更改从本地存储库推送到远程存储库:

            git push origin master

            在此之后,您可能需要输入您的 github 用户名/密码。 Here's 使用 git 的一个很好的入门。有点旧,但它很好地涵盖了正在发生的事情。

            【讨论】:

            • -a 会在提交前添加新的(未暂存的)文件吗?
            • git commit -agit commit --all 的简写,所以是的。
            • $ man git-commit-a 包含此内容:“告诉命令自动暂存已修改和删除的文件,但未告诉 Git 的新文件不受影响。”,即为什么我问。
            • 为了完整起见,添加一个类型的多个文件的最简单方法是使用星号,例如 html 使用“git add *.html”
            【解决方案12】:

            听起来 git 正在启动您的编辑器(可能是 vi),以便您可以输入提交消息。如果你不熟悉vi,那就是easy to learn the basics。替代方案是:

            • 使用git commit -a -m "my first commit message"在命令行中指定提交信息(使用它不会启动编辑器)

            • EDITOR环境变量设置为你熟悉的编辑器

            【讨论】:

            • 非常感谢所有回复的人。我成功提交并推送了我的文件。
            【解决方案13】:

            当您更改文件或在存储库中添加新文件时,您首先必须暂存它们。

            git add <file>
            

            或者如果你想全部上演

            git add .
            

            通过这样做,你告诉 git 在你的下一次提交中你想要什么文件。然后你做:

            git commit -m 'your message here'
            

            你使用

            git push origin master
            

            其中 origin 是远程存储库分支,master 是您的本地存储库分支。

            【讨论】:

            • 谢谢!在最后一个命令 git push origin master。我实际上正在处理一个不同的分支名称(它是从主分支创建的)。所以我需要输入我的分支名称或原产地主人。再次感谢
            • 没问题。:) 是的,你应该使用你的分支名称,origin master 只是例子。
            猜你喜欢
            • 1970-01-01
            • 2019-06-13
            • 1970-01-01
            • 1970-01-01
            • 2012-01-14
            • 1970-01-01
            • 2020-07-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多