HOWTO · Git
git add, git commit y git push en One Command
Puede agregar, confirmar y enviar archivos con un solo comando en Git.
En esta página
Puedes ejecutar git add, git commit y git push desde un solo atajo. El atajo sigue ejecutando estas operaciones de Git por separado: prepara los cambios seleccionados, crea un commit local y luego lo envía a un remoto. Puedes configurar una función de Bash o un alias de Git y pasarle un mensaje para el commit.
Antes de usar cualquiera de los dos atajos, comprueba qué cambios están preparados y confirma la rama y el remoto actuales. Ambos ejemplos usan origin y envían HEAD; el remoto debe existir, aceptar la rama y permitir la autenticación con tus credenciales. Si el envío falla, el commit que ya se creó localmente no se deshace.
Añadir, hacer commit y enviar con un solo comando
Decide qué cambios preparará el atajo antes de automatizar la secuencia. git add . prepara los cambios del directorio actual, incluidos los de sus subdirectorios. git add -A prepara las adiciones, modificaciones y eliminaciones de todo el árbol de trabajo. Cualquiera de los dos comandos puede incluir cambios que no querías confirmar, así que, si no tienes claro el alcance, revisa las diferencias preparadas con git diff --cached antes de hacer el commit.
Los ejemplos usan git push origin HEAD para enviar el commit actual a origin. Esto requiere que el remoto esté configurado y que acepte la rama. Si el envío falla, el commit permanece en local; antes de volver a intentarlo, comprueba la URL del remoto, las políticas de la rama, la autenticación y la conexión de red.
Crear una función de Bash
Una función de Bash resulta práctica cuando quieres tener un comando breve disponible en el shell. Añade la función a ~/.bashrc y carga ese archivo en la sesión actual de Bash con source ~/.bashrc. En sesiones futuras, el comportamiento de inicio de Bash depende de cómo se haya iniciado y configurado el shell. Git no lee .bashrc; si la función no está disponible, comprueba si la sesión de Bash carga ese archivo o cárgalo directamente.
Este ejemplo autónomo crea un repositorio local temporal y un remoto, define acp y la llama con un mensaje personalizado. En tu propia configuración, copia la definición de la función en ~/.bashrc; los comandos para preparar el repositorio temporal se incluyen para que el ejemplo pueda ejecutarse por sí solo.
set -e
tmp_dir=$(mktemp -d)
trap 'rm -rf "$tmp_dir"' EXIT
git init --bare -q "$tmp_dir/remote.git"
git init -q -b main "$tmp_dir/work"
cd "$tmp_dir/work"
git config user.name "Example User"
git config user.email "example@example.com"
git remote add origin "$tmp_dir/remote.git"
printf 'Initial content\n' > README.md
git add README.md
git commit -qm "Initial commit"
push_output=$(git push -q -u origin HEAD 2>&1) || {
printf '%s\n' "$push_output" >&2
exit 1
}
printf 'Updated content\n' > README.md
acp() {
git add -A && git commit -qm "$1" && {
push_output=$(git push -q origin HEAD 2>&1) || {
printf '%s\n' "$push_output" >&2
return 1
}
}
}
acp "Update README.md"
Aquí, "$1" pasa el primer argumento como mensaje del commit. La función usa git add -A, por lo que prepara los cambios de todo el árbol de trabajo antes de hacer el commit. Si el repositorio contiene otros cambios que quieres excluir, revisa primero las diferencias preparadas. Para usar la función después de guardarla en ~/.bashrc, ejecuta source ~/.bashrc una vez en la sesión actual; luego llámala con un mensaje entre comillas, por ejemplo, acp "Update README.md".
Crear un alias de Git
Un alias de Git funciona desde un repositorio sin depender de un archivo de inicio del shell. Configúralo con git config --global alias.lazygit '!f() { git add -A && git commit -m "$@" && git push origin HEAD; }; f' y luego ejecútalo con git lazygit "Update LICENSE.md". Usa --global para que el alias esté disponible en tus repositorios; si lo omites, se guardará solo en el repositorio actual.
Este ejemplo ejecutable usa la misma configuración local temporal que el ejemplo de la función y luego define un alias limitado al repositorio. El alias encadena las operaciones con &&, así que solo pasa a la siguiente cuando la anterior se completa correctamente.
set -e
tmp_dir=$(mktemp -d)
trap 'rm -rf "$tmp_dir"' EXIT
git init --bare -q "$tmp_dir/remote.git"
git init -q -b main "$tmp_dir/work"
cd "$tmp_dir/work"
git config user.name "Example User"
git config user.email "example@example.com"
git remote add origin "$tmp_dir/remote.git"
printf 'Initial content\n' > LICENSE.md
git add LICENSE.md
git commit -qm "Initial commit"
push_output=$(git push -q -u origin HEAD 2>&1) || {
printf '%s\n' "$push_output" >&2
exit 1
}
git config alias.lazygit '!f() { git add -A && git commit -qm "$@" && git push -q origin HEAD; }; f'
printf 'Updated content\n' > LICENSE.md
if ! alias_output=$(git lazygit "Update LICENSE.md" 2>&1); then
printf '%s\n' "$alias_output" >&2
exit 1
fi
En el alias, "$@" reenvía los argumentos que siguen a git lazygit; si pones entre comillas un mensaje de varias palabras, se mantiene como un único mensaje de commit. El alias también prepara todos los cambios con git add -A, así que, si necesitas comprobar su alcance, revisa git diff --cached antes de hacer el commit. El ejemplo guarda el alias en este repositorio temporal; el comando --global anterior lo guarda en la configuración de Git de tu usuario.
Elegir y usar el enfoque adecuado
Usa una función de Bash si quieres un comando del shell que incluya lógica de shell o que puedas adaptar en tu configuración de Bash. Usa un alias de Git si quieres que el atajo pertenezca a Git y esté disponible mediante git <alias>. En ambos casos, git add, git commit y git push siguen siendo pasos distintos, y un commit correcto no garantiza que el envío también lo sea.
Antes de usar cualquiera de los atajos, confirma que estás en el repositorio y la rama adecuados, que origin apunta al remoto previsto y que solo se prepararán los cambios deseados. Tanto la función como el alias usan git add -A, que prepara las adiciones, modificaciones y eliminaciones de todo el árbol de trabajo. Para limitar la preparación a un directorio, cambia el comando de preparación de forma deliberada y revisa el resultado; no des por hecho que el atajo selecciona únicamente el archivo mencionado en el mensaje del commit.
Si la función no está disponible, comprueba que la sesión activa de Bash haya cargado ~/.bashrc. Si el alias no está disponible, revisa la configuración de Git del repositorio o la configuración global donde lo guardaste. Si rechazan el envío, el commit local sigue presente; resuelve el problema del remoto o de la rama y envía el commit previsto siguiendo el flujo habitual de tu repositorio.