¿Cómo puedo organizar y confirmar todos los archivos, incluidos los archivos recién agregados, con un solo comando?

425

¿Cómo puedo organizar y confirmar todos los archivos, incluidos los archivos recién agregados, con un solo comando?

Anantha Kumaran
fuente
3
Lo frustrante es que esto solía ser posible y era una sintaxis estándar para confirmar y agregar cualquier archivo nuevo: git commit -a Pero fiel a la forma, la sintaxis de git cambió. Confundió a los usuarios existentes (y rompió sus scripts), eliminó funcionalidades útiles y sustituyó una bandera innecesaria.
fijiaaron
1
Hay un duplicado de esto en git add -A, git commit en un comando? . La respuesta aceptada allí es similar a la respuesta aceptada aquí, pero sugiere crear un alias git para acortar el tipeo involucrado (y muestra cómo hacerlo).
Mark Amery
Posible duplicado de Git add y commit en un comando
Luciano

Respuestas:

568

Hace

git add -A && git commit -m "Your Message"

cuenta como un "comando único"?

Edición basada en la respuesta de @ thefinnomenon a continuación :

Para tenerlo como git alias, use:

git config --global alias.coa '!git add -A && git commit -m'

y confirme todos los archivos, incluidos los nuevos, con un mensaje con:

git coa "A bunch of horrible changes"

Explicación (de la git adddocumentación ):

-A, --todos, --no-ignore-remove

Actualice el índice no solo donde el árbol de trabajo tiene una coincidencia de archivos, sino también donde el índice ya tiene una entrada. Esto agrega, modifica y elimina las entradas de índice para que coincidan con el árbol de trabajo.

Si no <pathspec>se da cuando se usa la opción -A, todos los archivos en todo el árbol de trabajo se actualizan (las versiones anteriores de Git se usan para limitar la actualización al directorio actual y sus subdirectorios).

Ian Clelland
fuente
3
¿Qué pasa con el mensaje de confirmación?
Narendra Jaggi
11
@NarendraJaggi git add -A && git commit -m "Tu mensaje"
Dr.jacky
1
uno podría poner eso en su propio archivo .sh o .bat y simplemente usarlo como un comando. El mensaje podría ser param1
BlueWizard
Y también puede agregar accesos directos para los comandos básicos de git en su .bashrc: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git commit' alias gs = 'git status' alias gd = 'git diff' alias ga = 'git add' alias gck = 'git checkout' alias gb = 'git branch' alias gl = 'git log' alias lcp = 'git format-patch -1 HEAD' alias resetToMaster = 'git reset --duro origen / master '
ni3
3
En powershell reemplace "&&" para ";" para ejecutar ambos comandos, así:git add -A ; git commit -m "Your Message"
Rafael Miceli
415

Este comando agregará y confirmará todos los archivos modificados, pero no los archivos recién creados .

git commit -am  "<commit message>"

De man git-commit:

   -a, --all
       Tell the command to automatically stage files that have been modified
       and deleted, but new files you have not told Git about are not
       affected.
Jai Keerthi
fuente
101
En realidad, esto no responde a la pregunta, de hecho específicamente (en negrita no menos) excluye una de las partes clave de la solución buscada.
Arunas
66
No agrega ni confirma archivos sin seguimiento.
b15
3
Pero cubre la situación más típica cuando se compromete después de "git add -A" y se da cuenta de que olvidó cambiar algo pequeño en el código. Odio escribir el mismo mensaje de confirmación varias veces desde cero
KorbenDallas
pero el iniciador de hilo dice TODOS LOS ARCHIVOS, entonces, creo que este no cuenta
Frederick G. Sandalo
Y también puede agregar accesos directos para los comandos básicos de git en su .bashrc: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git commit' alias gs = 'git status' alias gd = 'git diff' alias ga = 'git add' alias gck = 'git checkout' alias gb = 'git branch' alias gl = 'git log' alias lcp = 'git format-patch -1 HEAD' alias resetToMaster = 'git reset --duro origen / master '
ni3
26

Yo uso esta función:

gcaa() { git add --all && git commit -m "$*" }

En mi archivo de configuración zsh, así que solo puedo hacer:

> gcaa This is the commit message

Para organizar y confirmar automáticamente todos los archivos.

phlppn
fuente
1
para bash-likefunction gcaa() { git add --all && git commit -m "$*" && git push }
Damilola
1
@Damilola: ¿qué quieres decir con bash-like ? la sintaxis en la respuesta también funciona en bash
Eliran Malka
esto es bueno, anteriormente usé un alias como gaa && gc -m "my commit"pero es mucho más agradable ... <se apresura a cambiar bashrc ..>
andy mccullough
24

No estoy seguro de por qué todas estas respuestas bailan en torno a lo que creo que es la solución correcta, pero lo que vale aquí es lo que uso:

Crea un alias:

git config --global alias.coa '!git add -A && git commit -m'

Agregue todos los archivos y confirme con el mensaje:

git coa "A bunch of horrible changes"

NOTA: coaes la abreviatura de commit all y se puede reemplazar con cualquier cosa que su corazón desee

thefinnomenon
fuente
1
Ninguna otra respuesta que esta simplifica con éxito el proceso de comprometer todo con un mensaje.
Seph Reed
2
Esto es increíble, estaba buscando el git aliascamino, el resto es aburrido.
Qortex
9

Comprometerse en git puede ser un proceso de múltiples pasos o un paso dependiendo de la situación.

  1. Esta situación es donde tiene varios archivos actualizados y desea confirmar:

    Debe agregar todos los archivos modificados antes de comprometer algo.

    git add -A
    

    o

    git add --all
    
  2. Después de eso, puede usar commit todos los archivos agregados

    git commit
    

    con esto tienes que agregar el mensaje para este commit.

King Linux
fuente
6

Si solo desea una forma "rápida y sucia" de ocultar los cambios en la rama actual, puede usar el siguiente alias:

git config --global alias.temp '!git add -A && git commit -m "Temp"'  

Después de ejecutar ese comando, puede escribir git temppara que git confirme automáticamente todos sus cambios en la rama actual como una confirmación denominada "Temp". Luego, puede usar git reset HEAD~más adelante para "confirmar" los cambios para poder seguir trabajando en ellos, o git commit --amendpara agregar más cambios a la confirmación y / o darle un nombre apropiado.

Ajedi32
fuente
4

Tengo en mi configuración dos alias:

alias.foo=commit -a -m 'none'
alias.coa=commit -a -m

si soy demasiado vago, solo confirmo todos los cambios con

git foo

y solo para hacer un commit rápido

git coa "my changes are..."

coa significa "cometer todo"

Frank sistemático
fuente
99
Odiaría trabajar con un repositorio lleno de mensajes de confirmación que digan "ninguno", y también rechazaría cualquier RP sobre esa base. Desafortunadamente, la única forma en que puede aprender la importancia de tener buenos mensajes de confirmación es cuando tiene que volver a auditar algo escrito hace mucho tiempo ("esta línea está causando un error ... ¿por qué se agregó? romper si lo cambio / elimino? ").
gregmac
1
Los compromisos con "ninguno" nunca tienen la intención de permanecer por mucho tiempo. Normalmente comienzo mi propia rama de características, hago micro commits y los convierto en algo más razonable antes de una fusión. Obviamente, las personas que hacen commits para cada función modificada y no les importa un registro completo de git no lo necesitan.
SystematicFrank
1
Utilizo 'wip' (abreviatura de "trabajo en progreso") en lugar de 'ninguno' para este propósito y solo envío tales confirmaciones a mis sucursales privadas.
Sergej Koščejev
Todavía no es útil, porque eventualmente esos compromisos de "wip" o "none" lo convertirán en una rama que otras personas ven, y contaminarán el registro de mensajes. Si está aplastando todos sus compromisos antes de presionar, eso sería aceptable, pero de lo contrario sigue siendo molesto para el equipo.
Jordania
Esta es una buena idea, y combinándola con la siguiente respuesta, puede obtener la respuesta 100% precisa para el OP. De hecho, describí los pasos necesarios (usando git-bash) en mi respuesta. ( stackoverflow.com/a/43442269/869239 )
VeRo
3

Ejecuta el comando dado

git add . && git commit -m "Changes Committed"

Sin embargo, incluso si parece un solo comando, son dos comandos separados que se ejecutan uno por uno. Aquí solíamos &&combinarlos. No es muy diferente a correr git add .y por git commit -m "Changes Committed"separado. Puede ejecutar varios comandos juntos, pero la secuencia importa aquí. Cómo, si desea enviar los cambios al servidor remoto junto con la preparación y la confirmación, puede hacerlo como se indica,

git add . && git commit -m "Changes Committed" && git push origin master

En cambio, si cambia la secuencia y pone el pushprimero, se ejecutará primero y no dará el empuje deseado después de la puesta en escena y el compromiso solo porque ya se ejecutó primero.

&&ejecuta el segundo comando en la línea cuando el primer comando regresa con éxito, o con un nivel de error de 0. Lo contrario de &&es ||, que ejecuta el segundo comando cuando el primer comando no tiene éxito, o con un nivel de error de 1.

Alternativamente, puede crear alise as git config --global alias.addcommit '!git add -a && git commit -m'y usarlo comogit addcommit -m "Added and commited new files"

Kiran Maniya
fuente
2

Excelentes respuestas, pero si buscas una línea única, puedes concatenar, alias y disfrutar de la comodidad:

git add * && git commit -am "<commit message>"

Es una sola línea pero dos comandos, y como se mencionó, puede usar un alias para estos comandos:

alias git-aac="git add * && git commit -am " (el espacio al final es importante) porque va a parametrizar el nuevo comando de mano corta.

A partir de este momento, usarás este alias:

git-acc "<commit message>"

Básicamente dices:

git, agrega para mí todos los archivos no rastreados y compromételos con este mensaje de confirmación dado.

Espero que uses Linux, espero que esto ayude.

VeRo
fuente
0

Puedes escribir un pequeño guión (mira la respuesta de Ian Clelland) llamado git-commitallque usa varios comandos git para realizar lo que quieres hacer.
Coloque este script en cualquier lugar de su $PATH. Puedes llamarlo por git commitall... ¡muy útil!

Encontrado aquí (pregunta y todas las respuestas lamentablemente eliminadas, solo visibles con alta reputación)

tanascio
fuente
Todo el hilo es una buena lectura ... por eso lo
vinculé
@Dimitri: desafortunadamente algunas personas estudiosas decidieron eliminar este útil hilo. Todavía es visible con gran reputación, así que mantengo el enlace aquí.
tanascius
0

intente usar:

git add . && git commit -m "your message here"
Fotón
fuente