Git add y commit en un comando


392

¿Hay alguna manera que pueda hacer?

git add -A
git commit -m "commit message"

en un comando?

Parece que estoy haciendo mucho esos dos comandos, y si Git tuviera una opción como git commit -Am "commit message", la vida sería mucho más conveniente.

git committiene el -amodificador, pero no hace lo mismo que hacer git add -Aantes de comprometerse. git add -Aagrega archivos recién creados, pero git commit -amno lo hace. ¿Que hace?



1
ahorrar tiempo y confirmar cada cambio es mejor, así que estoy usando git commit -am"yes the code in committed"
Rizo

git add .es una opción más rápida para agregar todo
Ryan

Respuestas:


419

Puede usar alias git, p. Ej.

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

y úsalo con

git add-commit -m 'My commit message'

EDITAR: volvió a marcar ('), ya que de lo contrario fallará para la expansión de shell en Linux. En Windows , se debe usar comillas dobles (") en su lugar (señalado en los comentarios, no se verificó).


24
Use git config --global --unset alias.<your_alias>para desarmar el alias.
TMOTTM

11
@MrFusion Convierte el comando en un comando de shell externo en lugar de un acceso directo al comando git interno, es decir, hace que toda la línea se ejecute como un proceso separado.
Martin C.

8
Prefiero git config --global alias.add-commit '!git add -A && git commit -m'no tener que escribir -mtodo el tiempo.
incandescentman

21
Soy demasiado vago para escribir 'add-commit' y '-m' cada vez. En consecuencia, git config --global alias.ac '!git add -A && git commit -m' git ac 'comment'
escribo

55
git config --global alias.add-commit "!git add -A && git commit"(es decir, comillas dobles en lugar de comillas simples) es lo que funciona en Windows.
Saheed

269
git commit -am "message"

es una manera fácil de decirle a git que elimine los archivos que ha eliminado, pero generalmente no recomiendo estos flujos de trabajo generales. Las confirmaciones de Git deberían, en la mejor práctica, ser bastante atómicas y solo afectar a unos pocos archivos.

git add .
git commit -m "message"

es una manera fácil de agregar todos los archivos nuevos o modificados. Además, se aplica la calificación general. Los comandos anteriores no eliminarán los archivos eliminados sin el git rmcomando.

git add app
git commit -m "message"

es una manera fácil de agregar todos los archivos al índice desde un único directorio, en este caso el appdirectorio.


41
o simplemente git commit -am "message", solo asegúrate de que no haya nuevos archivos que git aún no haya detectado. de lo contrario, deberá usarlo git add . &&delante de eso ... para hacerlo en una línea.
courtimas

2
Lo sentimos pero la pregunta original era exactamente sobre esto - evitando git add .en los expedientes fueron añadidos
Gorn

50

Para mantenerlo en una línea, use:

git add . && git commit -am "comment"

Esta línea agregará y confirmará todos los archivos modificados y agregados al repositorio.


12
Cabe señalar que esto es específico de un shell de Linux (bash y posiblemente otros).
R. Martinho Fernandes

66
git commit -am "comment"es perfecto
Abhishek Bedi

2
Si usó: git add . Entonces no necesita usar la opción -a , solo necesita:git commit -m "comment"
Duc Chi

18

Solo combina tus comandos:

git add -A && git commit -m "comment" 

18

Solo adaptando la respuesta de Ales y el comentario de courtimas para linux bash :

Para mantenerlo en una línea, use:

git commit -am "comment"

Esta línea agregará y confirmará todos los cambios al repositorio.

Solo asegúrate de que no haya nuevos archivos que git aún no haya detectado. de lo contrario, deberá usar:

git add . ; git commit -am "message"


¿Cómo hacerlo git commit -am "comment", pero solo para 1 archivo? Digamos file.txt .
Santosh Kumar

git commit -am "comment"es un acceso directo para agregar y confirmar todos los archivos modificados. Si desea agregar y confirmar solo 1 archivo del que necesitará ejecutar:git add file.txt ; git commit -m "comment"
danilo

En el segundo caso, no es necesario agregar -a con m. Debería ser git add. ; Git commit -m "message"
Manish Bansal

12

En la versión posterior de git puedes agregar y confirmar de esta manera

git commit -a -m "commit message"

Además eres un alias:

[alias]
    ac = commit -a -m

Entonces puedes usarlo así:

git ac "commit message"

66
Este comando no confirmará los nuevos archivos, solo los actualizados.
ruvim

11

En mi máquina Windows, configuré este .bashrcalias para simplificar todo el proceso.

  • crear / localizar su .bashrc- referir SO hilo
  • agregue la siguiente línea al archivo

    alias gacp='echo "enter commit message : " && read MSG && git add . && git commit -m "$MSG" && git push'
    

    hace git add commit y push. modifíquelo de cualquier manera, digamos que no desea que el comando push elimine esa parte

  • recarga .bashrc/ cierra y vuelve a abrir tu caparazón

  • ahora puedes hacer todo el proceso con el gacpcomando.

FYI ese guión tiene una git push. No copie y pegue eso.
Yar

11

bastante seguro de que puedes usar:

git commit -am "commit all the things"

1
Este comando es la forma más corta y probablemente la más fácil de lograr el resultado requerido. Prueba en git versión 2.6.3.windows.1.
Ithar

55
Sin embargo, esto no confirmará los archivos recién agregados, ¡solo los "actualizados"!
usuario13107

1
CORRECTO, no comenzará a rastrear archivos que no se rastrean
Blair Anderson

@BlairAnderson: ¿hay un comando para agregar archivos sin seguimiento también con agregar y confirmar?
MasterJoe2

6

Si escribes:

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

una vez, solo tendrá que escribir

git a

cada vez:

git a 'your comment'

44
Esta debería ser la respuesta principal, súper fácil e incluye archivos SIN SEGUIMIENTO, a diferencia de la mayoría de las otras sugerencias.
JesseBoyd

6

Solo usa:

git commit -m "message" .     

Observe la "." al final ... que también puede ser una ruta a un archivo / directorio


¿funcionará esto para archivos recién creados o solo para archivos existentes que se cambian?
MasterJoe2

5

Hago una concha

#!/bin/sh

clear

git add -A 
git commit -a -m "'$*'"

guardar por ejemplo git.sh y luego llamar:

sh git.sh your commit message

1
no es portátil para otros sistemas operativos, y git puede hacer esto por sí mismo, entonces, ¿cuál es el punto?
naught101

2
@ naught101 es obvio que git puede hacer esto usted mismo, el punto es que este shell sirve para agilizar el proceso para las personas que usan git en Linux, siendo mucho más simple ejecutar un mensaje de confirmación sh git.sh y no ser portátil. no significa que funcionará correctamente.
ademar111190

5

Tengo esta función en mi .bash_profileo .profileo .zprofileo lo obtiene proviene de shells de entrada:

function gac () {
  # Usage: gac [files] [message]
  # gac (git add commit) stages files specified by the first argument
  # and commits the changes with a message specified by the second argument.
  # Using quotes one can add multiple files at once: gac "file1 file2" "Message".
  git add $1 && git commit -m "$2"
}

3

Puedes usar -a

git commit -h

...
Commit contents options
    -a, -all    commit all changed files
...

git commit -a # It will add all files and also will open your default text editor.

2

Espero que esto ayude a alguien y siéntase libre de editar o mejorar. No estoy seguro de cuál es la forma más rápida, pero esto ciertamente simplifica mi proceso de confirmación de código al usar "ohmyzsh" para Git .

https://ohmyz.sh/

  • git add . se acorta a ga .
  • git commit -m "message" se acorta a gc -m "message"
  • git push se acorta a gp

ingrese la descripción de la imagen aquí


1

Uso lo siguiente (ambos son trabajos en progreso, así que intentaré recordar actualizar esto):

# Add All and Commit
  aac = !echo "Enter commit message:" && read MSG && echo "" && echo "Status before chagnes:" && echo "======================" && git status && echo "" && echo "Adding all..." && echo "=============" && git add . && echo "" && echo "Committing..." && echo "=============" && git commit -m \"$MSG\" && echo "" && echo "New status:" && echo "===========" && git status

# Add All and Commit with bumpted Version number
  aacv = !echo "Status before chagnes:" && echo "======================" && git status && echo "" && echo "Adding all..." && echo "=============" && git add . && echo "" && echo "Committing..." && echo "=============" && git commit -m \"Bumped to version $(head -n 1 VERSION)\" && echo "" && echo "New status:" && echo "===========" && git status

Con la echo "Enter commit message:" && read MSGparte inspirada en Sojan V Jose

Me encantaría obtener una if elsedeclaración allí para que pueda hacer que aacv me pregunte si quiero implementar cuando esté hecho y hacerlo por mí si escribo 'y', pero supongo que debería poner eso en mi .zshrcarchivo


1

Utilizo el siguiente alias para agregar todo y confirmar :

git config --global alias.ac '!git add -A && git commit -a'

Luego, escribiendo:

git ac

Obtengo una ventana vim para obtener más herramientas de edición para mi mensaje de confirmación.


Debería demandarte por plagio. :)
Navid Vafaei

Explica las diferentes ideas adicionales que proporciona tu respuesta en comparación con la respuesta notablemente anterior de Navid.
Yunnosch

@Yunnosch Supongo que no vi la respuesta de Navid antes de publicar porque es "demasiado vago": P para publicarla como respuesta completa. De hecho, es lo mismo, y en realidad tengo este alias desde hace mucho tiempo, lo tomé prestado de un compañero de trabajo. Así que supongo que podemos llamar a esto: cadena de plagio. Lo siento si te molestó.
Gus

1

En caso de que alguien quisiera "agregar y confirmar" para un solo archivo, que fue mi caso, creé el script a continuación para hacer justamente eso:

#!/bin/bash

function usage {
    echo "Usage: $(basename $0) <filename> <commit_message>"    
}

function die {
    declare MSG="$@"
    echo -e "$0: Error: $MSG">&2
    exit 1
}

(( "$#" == 2 )) || die "Wrong arguments.\n\n$(usage)"

FILE=$1
COMMIT_MESSAGE=$2

[ -f $FILE ] || die "File $FILE does not exist"

echo -n adding $FILE to git...
git add $FILE || die "git add $FILE has failed."
echo done

echo "commiting $file to git..."
git commit -m "$COMMIT_MESSAGE" || die "git commit has failed."

exit 0

Lo llamé "gitfile.sh" y lo agregué a mi $ PATH. Entonces puedo ejecutar git add y commit para un solo archivo en un comando:

gitfile.sh /path/to/file "MY COMMIT MESSAGE"

0

Yo uso este alias de git:

git config --global alias.cam '!git commit -a -m '

Entonces, en lugar de llamar

git add -A && git commit -m "this is a great commit"

Solamente lo hago:

git cam "this is a great commit"


0

puede usar git commit -am "[comentario]" // mejor solución o git add. && git commit -m "[comentario]"


0

Comprueba primero qué alias tienes ...

git config --get-regexp alias

Si no está allí, puede crear el suyo (referencia: https://git-scm.com/book/en/v2/Git-Basics-Git-Aliases )

// git add

git config --global alias.a '!git add -A'

// git commit

git config --global alias.c '!git commit'

// git commit -m

git config --global alias.cm '!git commit -m'

// git add commit

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

// git add commit -m

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

Por ejemplo, si usa el último ...

git acm 'My commit'

0
  1. Crea un alias en bash: alias gac="git add -A && git commit -m"

    (Elegí llamar al atajo 'gac' pero no tienes que hacerlo)

  2. Úselo: gac 'your commit message here'


0

Para los respaldos plateados en la multitud que están acostumbrados a cosas como Subversion ... para hacer un "commit" en el antiguo sentido de la palabra (es decir, o en git speak, para agregar, comprometer y empujar) en un solo paso, generalmente agrego algo como lo siguiente en la raíz de mi proyecto (como un archivo bat en Windows, por ejemplo, git-commit.bat). Luego, cuando quiero agregar, confirmar y presionar, simplemente escribo algo como git-commit "Added some new stuff"y todo va al repositorio remoto.

Además, de esta manera cualquier persona en el proyecto puede usar lo mismo sin tener que cambiar nada localmente.

Por lo general, también corro git config credential.helper storeuna vez, así que no necesito dar uid / pwd cuando se ejecuta.

::
:: add, commit, and push to git
::

@echo off
echo.
echo.
echo 
echo Doing commit...
git add -A && git commit -m %1
echo.
echo.
echo Doing push...
git push
echo.
echo.
echo Done.
echo.

0

Esto funciona para mí, siempre ejecute los siguientes comandos:

1.git add .
2.git commit -m "no bugs please"
3.git push origin *

donde * se basa en la rama a la que está presionando, y también los mensajes de confirmación siempre se pueden cambiar para adaptarse al contexto.


-1
  1. escribe git add . && git commit -ame ingresa
  2. escribe historye ingresa
  3. recuerde el número para el comando anterior, digamos que el número es 543
  4. De ahora en adelante, para cada tipo de confirmación, !543 "your comment here"es decir, un signo de exclamación + número y un espacio y su comentario.

44
Voté en contra porque es una solución realmente extraña que puede romper las cosas de manera horrible una vez que su historial expire y que el comando 543 se convierta en otra cosa.
bfontaine


-4

Para mantenerlo en una línea, use:

gacm "your comment"

2
¿Podría darnos algunos antecedentes sobre esto o un enlace o algo así?
Gershom

77
Creo que este póster está trabajando con alias y no se da cuenta. Para que funcione lo anterior, desearía agregar un alias de shell como alias gacm="git add .; git commit -m"o (preferiblemente creo) un alias git como git config --global alias.gacm '!git add .;git commit -m'.
Mera Development
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.