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?

Chetan
fuente
44
posible duplicado de Git Confirma todos los archivos usando un solo cmd
Mr_and_Mrs_D
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ó).

Martin C.
fuente
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.

Jed Schneider
fuente
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.

Ales
fuente
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" 
Yarin
fuente
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"

danilo
fuente
¿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"
sirwinny
fuente
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.
Sojan V Jose
fuente
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"
Blair Anderson
fuente
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'
Navid Vafaei
fuente
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

Josh Olson
fuente
¿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
ademar111190
fuente
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"
}
Lenar Hoyt
fuente
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.
Druta Ruslan
fuente
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í

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

avjaarsveld
fuente
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.

Gus
fuente
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"
Bruno Negrão Zica
fuente
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"

Alejandro Silva
fuente
0

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

Gaurav Rathi
fuente
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'
Cruz Jurado
fuente
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'

H. Almidan
fuente
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.
Juan
fuente
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.

Fredrick Okereke
fuente
-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.
Kosmos Nagios
fuente
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
-2

Este resultado : intente esto: Comando simple de script uno para git add, git commit y git push

Abra su CMD en Windows y pegue esta respuesta

git commit -m "your message" . && git push origin master

Este ejemplo, la captura de pantalla de mi foto: https://i.stack.imgur.com/2IZDe.jpg

Anang Hanafi
fuente
-4

Para mantenerlo en una línea, use:

gacm "your comment"
Ravula Sathish
fuente
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