2010-09-02 11 views
34

¿Es redundante ejecutar git add . y luego git commit -am "commit message"?¿Es git commit -am redundante, si hago git add before?

¿Puedo simplemente ejecutar git add . y luego git commit -m "commit message" o, como alternativa, solo git commit -am "commit message"?

+5

creo que deberías hacerlo de forma explícita declara tu suposición de que estás en el nivel superior de tu proyecto; 'git add .' y' git commit -a' lograrán cosas muy diferentes si está en un subdirectorio. – meagar

Respuesta

42

Git add + git commit -m solo confirmará los archivos que ha agregado (nuevos y rastreados anteriormente), pero git commit -am comprometerá todos los cambios en los archivos rastreados, pero no agrega nuevos archivos.

+3

como se indica, 'git commit -am' no agregará archivos sin seguimiento, pero creo que señalaría que' git add -u' solo agregará (* u * pdate) actualmente _tracked_ elementos también ... – johnny

1

El modificador -a indica a git que muestre los archivos modificados para agregarlos, significa "todos" y no "agregar". Si desea que el contenido de un nuevo archivo se agregue a git, debe agregarlo usando git add antes de enviarlo.

Si ya ha realizado un git add ., entonces ya ha agregado todos los archivos en el directorio actual, es decir, los archivos nuevos y modificados. Por lo tanto, no necesita un interruptor -a para escenificar el contenido nuevamente. Así que puede seguirlo con un git -m "msg"

4

Creo que algunas de las respuestas anteriores no vieron el período posterior a git add (su pregunta original y algunas de las respuestas han sido editadas para que el período sea más claro).

git add . agregará todos los archivos en el directorio actual (y en cualquier subdirectorio) al índice (excepto aquellos ignorados por .gitignore).

La opción -a de git commit incluirá todos los cambios en los archivos que ya están siendo rastreados por git, incluso si esos cambios aún no se han agregado al índice.

En consecuencia, si todos los archivos ya están siendo rastreados por git, los dos enfoques tienen el mismo efecto. Por otro lado, si se han creado nuevos archivos, entonces git add .; git commit los agregará al repositorio, mientras que git commit -a no lo hará.

git add .; git commit -a es de hecho redundante. Todos los cambios ya se han agregado al índice, por lo que -a no hace nada.

+0

Usted Solo dije lo que dije con más palabras. Cuando alguien dice 'git add' significa que agrega los archivos que quiere, déjalo estar. o una lista de archivos. La diferencia está clara de todos modos, -am no agregará ningún archivo nuevo. – Tuminoid

8

En realidad, git commit -a no siempre es redundante, ¡ya que también elimina archivos! Por ejemplo, tiene dos archivos: un archivo se rastrea y el otro no. Ahora desea eliminar el seguimiento (en todas partes) y agregar el no rastreado.

Para eliminar el archivo rastreado. Si luego usa solo git add . y luego git commit, rastreará el nuevo pero no eliminará el archivo anterior en el repositorio.

Así que puede ejecutar git rm … o usar git commit -a.

+1

Esta es la respuesta correcta que responde la pregunta directamente. – CDR

25

No es redundante ejecutar git commit -am si eliminó los archivos rastreados. Vea una explicación más detallada de las opciones a continuación.

Mientras esté en el directorio raíz y desee agregar todos los archivos nuevos, modificaciones y eliminaciones, quiere 3) más abajo.

1) Confirme los archivos nuevos y las modificaciones en los archivos previamente rastreados, pero no agregue las eliminaciones.

Con Git < 2.0:

$ git add . 
$ git commit -m 

Con Git> = 2.0:

$ git add --ignore-removal . 
$ git commit -m 

2) Comprometerse modificaciones y supresiones de archivos rastreados, pero no aportan nueva archivos.

$ git commit -am 

3) cometer nuevos archivos y todos los archivos modificados (ambas modificaciones y supresiones) rastreados. O bien:

Con Git < 2.0:

$ git add . 
$ git commit -am 

... O:

$ git add -A 
$ git commit -m 

Con Git> = 2.0:

$ git add . 
$ git commit -m 
+0

Por lo tanto, ¿'git add .' +' git commit -am' es equivalente a 'git add -A'? – user1322092

+0

Si también haces una confirmación después de tu segunda alternativa, sí. 'git add .' +' git commit -am' es equivalente a 'git add -A' +' git commit -m'. He actualizado mi respuesta para reflejar esto. –

+0

'git add .' agrega supresiones de archivos desde Git 2.0.0:" git add "es lo mismo que" git add -A "now" (de las notas de la versión). Actualicé la publicación en consecuencia. –