Cómo agregar varios archivos a Git al mismo tiempo

120

Este será mi primer uso de git. He agregado archivos nuevos (muchos) a la carpeta / proyecto (repositorio local de git).

Revisé foros y tutoriales en línea y veo que puedo hacer

git commit -a

Así que voy a la carpeta base del repositorio y hago un

sudo git commit -a

Pero luego, aparecen algunas pantallas y me piden que agregue un comentario, lo cual hago. No sé cómo proceder o salir. No quiero estropear, así que hice ctrl + Z y no hice nada.

¿Pueden describir los comandos que necesito usar?

git commit -a 

y

git push?
kishore.
fuente
1
git commit -aabre un editor para que escriba el mensaje de confirmación. Ingrese un mensaje que desee ver como registro y salga del editor. Esto completa el compromiso. Siga eso enviando sus cambios al repositorio remoto usando git push <remote name> <branch name>comogit push remote master
Bhaskar
3
También tenga en cuenta, que no es necesario (y no debería) usosudo
Dax
Gracias por la respuesta Si no uso sudo, obtengo un error de permiso denegado.
kishore.
2
Habiendo usado sudo anteriormente, probablemente tenga archivos en su directorio de trabajo que ahora son propiedad de root por error. En este punto, realizar otras operaciones sin sudo provocará un error de permiso denegado porque no puede cambiar los archivos que son propiedad de root. Su repositorio puede estar un poco desordenado y podría ser mejor comenzar de nuevo (y no usar sudo).
Greg Hewgill
si desea agregar todos los archivos, puede usar `git add -a`. Pero si desea agregar varios archivos seleccionados. puede usar `git add -i '. consulte este git-scm.com/book/en/v2/Git-Tools-Interactive-Staging . Esto te ayudara .
Kapila Ranasinghe

Respuestas:

120

Para agregar todos los cambios que ha realizado:

git add .

Para cometerlos:

git commit -m "MY MESSAGE HERE" # -m es la bandera del mensaje

Puede juntar esos pasos así:

git commit -a -m "MY MESSAGE HERE"

Para enviar sus cambios confirmados desde su repositorio local a su repositorio remoto:

git push origin master

Es posible que deba escribir su nombre de usuario / contraseña para github después de esto. Aquí hay una buena introducción al uso de git. Un poco viejo, pero cubre muy bien lo que está pasando.

dax
fuente
¿ -aAgregará archivos nuevos (sin etapas) antes de la confirmación?
SabreWolfy
git commit -aes una abreviatura de git commit --all, así que sí, lo hará.
Dax
1
$ man git-commitincluye esto para -a: "Dile al comando que configure automáticamente los archivos que se han modificado y eliminado, pero los archivos nuevos que no le has dicho a Git no se ven afectados", por lo que pregunté.
SabreWolfy
Para completar, la forma más fácil de agregar varios archivos de un tipo es usando el asterisco, por ejemplo, para html use "git add * .html"
Inyoka
381

Utilice el git addcomando, seguido de una lista de nombres de archivo separados por espacios. Incluya rutas si están en otros directorios, por ejemplo directory-name/file-name.

git add file-1 file-2 file-3
Reggie Pinkham
fuente
1
Con solo especificar el nombre del archivo, aparece el error "fatal: pathpec 'filename.java' no coincide con ningún archivo". En su lugar, especifique la ruta completa del archivo y el nombre del archivo como este 'git add long / path / {file1, file2, ..., filen}'
Shravan Ramamurthy
4
Esto no funciona cuando uno de los nombres de archivo incluye un espacio en blanco con git 1.9.5
Maxime Helen
Necesitamos eliminar "<" y ">" de esto. Esto confundirá a alguien.
Saeed Entezari
30

Como algunos han mencionado, una posible forma es usar la puesta en escena interactiva de git . Esto es genial cuando tienes archivos con diferentes extensiones.

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

Si pulsa 2 a continuación, enterobtendrá una lista de archivos disponibles para ser añadido:

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

Ahora solo tienes que insertar el número de archivos que quieres agregar, así que si quisiéramos agregar TODOy index.htmlescribirí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>>

¿Ves el * antes del número? eso significa que se agregó el archivo.

Ahora imagina que tienes 7 archivos y quieres agregarlos todos excepto el 7. Claro que podríamos escribir, 1,2,3,4,5,6pero imagina que en lugar de 7 tenemos 16, eso sería bastante engorroso, lo bueno es que no necesitamos escribirlos todos porque podemos usar rangos, escribiendo1-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>>

Incluso podemos usar múltiples rangos, así que si queremos del 1 al 3 y del 5 al 7 tecleamos 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>>

También podemos usar esto para quitar la etapa de los archivos, si escribimos -number, así que si quisiéramos quitar la etapa del archivo número 1, escribirí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>>

Y, como puede imaginar, también podemos desestandarizar un rango de archivos, por lo que si escribimos -rangetodos los archivos de ese rango quedarían sin estadificar. Si quisiéramos quitar la etapa de todos los archivos del 5 al 7, escribirí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
fuente
2
personalmente me gusta así. es fácil de usar cuando tiene más archivos para confirmar y otras operaciones.
Kapila Ranasinghe
Una vez terminada, ¿cómo terminas la puesta en escena interactiva?
Crparedes
1
@Crparedes una vez que haya agregado los archivos, si presiona enter nuevamente se regresa al menú, luego debe elegir la opción 7para salir de la etapa interactiva.
Fabio Antunes
28

También puede seleccionar varios archivos como este

git add folder/subfolder/*

Esto agregará todos los archivos en la subcarpeta especificada. Muy útil cuando editas un montón de archivos pero solo quieres enviar algunos de ellos ...

nadalsol
fuente
14

Si desea agregar varios archivos en una carpeta determinada, puede dividirlos usando {,}. Esto es genial para no repetir caminos largos, por ejemplo

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

Tenga cuidado de no dejar espacios entre ,.

EliuX
fuente
¿Qué es largo / camino / aquí? @EliuX
lalithkumar
long / path podría ser una cadena de ruta con una longitud muy larga, por lo que es más cómodo no repetir esa parte sin tener que cdhacerlo
EliuX
4

Cuando cambie archivos o agregue nuevos en el repositorio, primero debe organizarlos.

git add <file>

o si quieres escenificar todo

git add .

Al hacer esto, le está diciendo que git qué archivos desea en su próxima confirmación. Entonces tu haces:

git commit -m 'your message here'

Tu usas

git push origin master

donde origin es la rama del repositorio remoto y master es la rama del repositorio local.

somi
fuente
¡Gracias!. En el último comando git push origin master. De hecho, estoy trabajando en un nombre de rama diferente (que se creó a partir de la rama maestra). Entonces, ¿necesito ingresar mi nombre de rama o maestro de origen? Gracias de nuevo
kishore.
No hay problema. :) Sí, debe usar los nombres de sus sucursales, el maestro de origen son solo ejemplos.
somi
1

Parece que git está iniciando su editor (probablemente vi) para que pueda escribir un mensaje de confirmación. Si no está familiarizado vi, es fácil aprender los conceptos básicos . Las alternativas son:

  • Úselo git commit -a -m "my first commit message"para especificar el mensaje de confirmación en la línea de comando (usar esto no lanzará un editor)

  • Establezca la EDITORvariable de entorno en un editor con el que esté familiarizado

Greg Hewgill
fuente
Muchas gracias a todos los que respondieron. Me comprometí con éxito y envié mis archivos.
kishore.
1

Si desea organizar y enviar todos sus archivos en Github, haga lo siguiente;

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

👉 paso1 .

git init

👉 paso 2.

a) para todos los archivos

git add -a

b) solo carpeta específica

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

👉 paso 3.

git commit -m "Your message about the commit"

👉 paso 4.

ingrese la descripción de la imagen aquí

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

👉 paso 5 .

git push -u origin master
git push origin master

si se enfrenta a este error que

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

👉 Utilice este comando

git push --force origin master
Harish Kumawat
fuente