Como adicionar vários arquivos ao Git ao mesmo tempo

120

Este será meu primeiro uso do git. Eu adicionei novos arquivos (muitos) para a pasta / projeto (repositório local git).

Passei por tutoriais e fóruns online e vi que posso fazer

git commit -a

Então eu vou para a pasta base do repositório e faço um

sudo git commit -a

Mas então, algumas telas aparecem e me pedem para adicionar um comentário que eu faço. não sei como proceder ou sair. Eu não quero bagunçar então eu fiz ctrl + Z e não fiz nada.

Vocês podem descrever os comandos que preciso usar?

git commit -a 

e

git push?
Kishore.
fonte
1
git commit -aabre um editor para você digitar a mensagem de confirmação. Digite a mensagem que deseja ver como registro e saia do editor. Isso conclui o commit. Acompanhe isso enviando suas alterações para o repositório remoto usando git push <remote name> <branch name>comogit push remote master
Bhaskar
3
também observe, você não precisa (e não deve) usarsudo
dax
Obrigado pela resposta. Se eu não usar o sudo, recebo o erro de permissão negada.
kishore.
2
Tendo usado o sudo anteriormente, você provavelmente possui arquivos em seu diretório de trabalho que agora pertencem ao root por engano. Neste ponto, fazer outras operações sem sudo causará um erro de permissão negada porque você não pode alterar os arquivos pertencentes ao root. Seu repositório pode estar um pouco bagunçado e pode ser melhor começar de novo (e não usar sudo).
Greg Hewgill
se você quiser adicionar todos os arquivos, pode usar `git add -a`. Mas se quiser adicionar vários arquivos selecionados. você pode usar `git add -i '. consulte este git-scm.com/book/en/v2/Git-Tools-Interactive-Staging . isso vai te ajudar.
Kapila Ranasinghe

Respostas:

120

Para adicionar todas as alterações que você fez:

git add .

Para comprometê-los:

git commit -m "MY MESSAGE HERE" # -m é o sinalizador de mensagem

Você pode colocar essas etapas juntas assim:

git commit -a -m "MY MESSAGE HERE"

Para enviar suas alterações confirmadas de seu repositório local para seu repositório remoto:

git push origin master

Você pode ter que digitar seu nome de usuário / senha para o github depois disso. Aqui está uma boa introdução ao uso do git. Um pouco velho, mas cobre o que está acontecendo muito bem.

dax
fonte
Irá -aadicionar novos arquivos (não testados) antes do commit?
SabreWolfy
git commit -aé uma abreviação de git commit --all, então sim, vai.
Dax
1
$ man git-commitinclui isso para -a: "Diga ao comando para preparar automaticamente os arquivos que foram modificados e excluídos, mas os novos arquivos que você não informou ao Git não são afetados.", é por isso que perguntei.
SabreWolfy
Para completar, a maneira mais fácil de adicionar vários arquivos de um tipo é usando o asterisco, por exemplo, para html, use "git add * .html"
Inyoka
381

Use o git addcomando, seguido por uma lista de nomes de arquivos separados por espaço. Inclui caminhos se em outros diretórios, por exemplo directory-name/file-name.

git add file-1 file-2 file-3
Reggie Pinkham
fonte
1
Apenas especificar o nome do arquivo dá este erro "fatal: pathspec 'filename.java' não encontrou nenhum arquivo". Em vez disso, especifique todo o caminho e o nome do arquivo como 'git add long / path / {file1, file2, ..., filen}'
Shravan Ramamurthy
4
Isso não funciona quando um dos nomes de arquivo inclui um espaço em branco com git 1.9.5
Maxime Helen
Precisamos remover "<" e ">" disso. Isso vai confundir alguém.
Saeed Entezari
30

Como alguns mencionaram, uma maneira possível é usar o teste interativo do git . Isso é ótimo quando você tem arquivos com extensões diferentes

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

Se você pressionar 2 , enterobterá uma lista de arquivos disponíveis para serem adicionados:

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

Agora você só precisa inserir o número de arquivos que deseja adicionar, então se quiséssemos adicionar TODOe index.htmldigitaríamos1,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>>

Você vê o * antes do número? isso significa que o arquivo foi adicionado.

Agora imagine que você tenha 7 arquivos e deseja adicioná-los todos, exceto o 7? Claro que poderíamos digitar, 1,2,3,4,5,6mas imagine que em vez de 7 temos 16, isso seria muito complicado, a boa coisa que não precisamos digitar todos porque podemos usar intervalos, digitando1-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>>

Podemos até usar vários intervalos, portanto, se quisermos de 1 a 3 e de 5 a 7, digitamos 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>>

Também podemos usar isso para remover o estágio de arquivos, se digitarmos -number, portanto, se quisermos remover o estágio de arquivo número 1, digitaríamos -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>>

E como você pode imaginar, também podemos remover o teste de uma série de arquivos, portanto, se digitarmos -rangetodos os arquivos nesse intervalo, não será o teste. Se quiséssemos remover o estágio de todos os arquivos de 5 a 7, digitaríamos -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>>
Fabio Antunes
fonte
2
pessoalmente gosto desse jeito. é fácil de usar quando você tem mais arquivos para confirmar e outras operações.
Kapila Ranasinghe de
Depois de terminar, como você termina a encenação interativa?
Crparedes
1
@Crparedes depois de adicionar os arquivos, se você pressionar enter novamente, ele voltará ao menu, então você deve escolher a opção 7de sair do teste interativo.
Fabio Antunes
28

Você também pode selecionar vários arquivos como este

git add folder/subfolder/*

Isso adicionará todos os arquivos na subpasta especificada. Muito útil quando você edita vários arquivos, mas deseja apenas enviar alguns deles ...

nadalsol
fonte
14

Se você deseja adicionar vários arquivos em uma determinada pasta, você pode dividi-los usando {,}. Isso é incrível para não repetir caminhos longos, por exemplo

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

Cuidado para não colocar espaços entre os ,.

EliuX
fonte
o que é longo / caminho / aqui? @EliuX
lalithkumar
long / path poderia ser uma string de caminho com um comprimento muito longo, então é mais confortável não repetir essa parte, sem ter que cdentrar nela
EliuX
4

Quando você altera arquivos ou adiciona um novo no repositório, primeiro você deve prepará-los.

git add <file>

ou se você quiser encenar todos

git add .

Ao fazer isso, você está dizendo para obter os arquivos que deseja em seu próximo commit. Então você faz:

git commit -m 'your message here'

Você usa

git push origin master

onde origin é o branch do repositório remoto e master é o branch do seu repositório local.

somi
fonte
Obrigado!. No último comando git push origin master. Na verdade, estou trabalhando em um nome de branch diferente (que foi criado a partir do branch master). Eu preciso inserir meu nome de branch ou mestre de origem. Obrigado novamente
kishore.
Não tem problema. :) Sim, você deve usar seus nomes de branch, o master de origem são apenas exemplos.
somi
1

Parece que o git está iniciando seu editor (provavelmente vi) para que você possa digitar uma mensagem de confirmação. Se você não está familiarizado com vi, é fácil aprender o básico . As alternativas são:

  • Usar git commit -a -m "my first commit message" para especificar a mensagem de confirmação na linha de comando (usar isso não iniciará um editor)

  • Defina a EDITORvariável de ambiente para um editor com o qual você esteja familiarizado

Greg Hewgill
fonte
Muito obrigado a todos que responderam. Eu enviei e enviei meus arquivos com sucesso.
kishore.
1

Se você deseja preparar e confirmar todos os seus arquivos no Github, faça o seguinte;

git add -A                                                                                
git commit -m "commit message"
git push origin master
Johnson Ogwuru
fonte
0

👉 etapa1 .

git init

👉 etapa2.

a) para todos os arquivos

git add -a

b) apenas pasta específica

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

👉 etapa3.

git commit -m "Your message about the commit"

👉 etapa4.

insira a descrição da imagem aqui

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

👉 etapa 5 .

git push -u origin master
git push origin master

se você está enfrentando este erro então

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

👉 Use este comando

git push --force origin master
Harish Kumawat
fonte