如何同时将多个文件添加到Git


120

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

我浏览了在线教程和论坛,看到我可以做

git commit -a

所以我转到存储库的基本文件夹并执行

sudo git commit -a

但是随后出现了一些屏幕,要求我添加一条评论。我不知道如何进行或退出。我不想搞砸,所以我做了ctrl + Z却什么也没做。

你们能概述我需要使用的命令吗?

git commit -a 

git push?

1
git commit -a打开一个编辑器供您键入提交消息。输入您要查看的消息作为日志并退出编辑器。这样就完成了提交。按照使用推你的变化远程仓库,最多git push <remote name> <branch name>git push remote master
巴斯卡尔

3
还要注意,您不需要(也不应该)使用sudo
dax

感谢您的答复。如果我不使用sudo,我会得到权限被拒绝的错误。
kishore。

2
以前使用过sudo时,您的工作目录中可能已有一些文件,这些文件现在错误地由root拥有。此时,在没有 sudo的情况下执行其他操作将导致权限被拒绝错误,因为您无法更改root拥有的那些文件。您的存储库可能会有些混乱,因此最好重新开始(并且不要使用sudo)。
Greg Hewgill 2013年

如果要添加所有文件,可以使用`git add -a`。但是,如果要添加多个选定文件。您可以使用`git add -i'。请参阅此git-scm.com/book/en/v2/Git-Tools-Interactive-Staging。这将帮助您。
卡皮拉·拉纳辛格

Answers:


120

要添加您所做的所有更改:

git add .

提交它们:

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

您可以像这样将这些步骤放在一起:

git commit -a -m "MY MESSAGE HERE"

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

git push origin master

在此之后,您可能需要输入github的用户名/密码。 这是使用git 一个很好的入门。有点老了,但是涵盖了所有进展。


-a在提交之前会添加新的(未暂存的)文件吗?
SabreWolfy '16

git commit -a是的简写git commit --all,所以可以。
dax

1
$ man git-commit包括以下内容-a:“告诉命令自动暂存已修改和删除的文件,但是您未告知Git的新文件不受影响。”,这就是我问的原因。
SabreWolfy '16

为了完整
起见

381

使用git add命令,然后使用空格分隔的文件名列表。

git add file-path-1 file-path-2 file-path-3

1
仅指定文件名会出现此错误“致命:pathspec'filename.java'与任何文件都不匹配”。而是像这样'git add long / path / {file1,file2,...,filen}'指定整个文件路径和文件名
Shravan Ramamurthy

4
当其中一个文件名包含带有git 1.9.5的空格时,这将不起作用
Maxime Helen

我们需要从中删除“ <”和“>”。这会使某人感到困惑。
Saeed Entezari

30

正如一些人提到的,一种可能的方法是使用git交互式登台。当您使用具有不同扩展名的文件时,这非常好

$ 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但是可以想象,如果不是7,我们可以输入16,那将是非常麻烦的事情,我们不需要全部输入,因为我们可以通过键入来使用范围,这是一件好事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>>

2
我个人喜欢这种方式。当您有更多文件要提交和其他操作时,它很容易使用。
卡皮拉·拉纳辛格

结束后,如何完成交互式暂存?
Crparedes

1
@Crparedes添加文件后,如果再次按Enter,它将返回菜单,那么您必须选择7从交互式暂存中退出的选项。
Fabio Antunes

28

您也可以选择多个文件

git add folder/subfolder/*

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


14

如果要在给定文件夹中添加多个文件,则可以使用进行拆分{,}。这对于不重复长路径是很棒的,例如

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

当心不要在空格之间放置空格,


在这里长/路径/是什么?@EliuX
lalithkumar

long / path可能是长度很长的路径字符串,因此更舒适,不必重复这样的部分,而不必cd插入它
EliuX

4

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

git add <file>

或者如果您要上演所有

git add .

这样,您就告诉git在下一次提交中需要哪些文件。然后,您执行以下操作:

git commit -m 'your message here'

你用

git push origin master

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


谢谢!。在最后一条命令git push origin master上。我实际上正在使用不同的分支名称(该名称是从master分支创建的)。因此,我需要确认我的分支名称或来源主管。再次感谢
kishore。

没问题。:)是的,您应该使用您的分支名称,原始主机只是示例。
somi

1

听起来git正在启动您的编辑器(可能是vi),以便您可以输入提交消息。如果您不熟悉vi,则很容易学习基础知识。替代方法是:

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

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


非常感谢大家的答复。我成功提交并推送了文件。
kishore。

1

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

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

0

👉步骤1

git init

👉步骤2。

a)所有文件

git add -a

b)仅特定文件夹

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

👉步骤3。

git commit -m "Your message about the commit"

👉步骤4。

在此处输入图片说明

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
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.