Tabla de contenido
- Configuración Inicial
- Gestión de Ramas
- Staging y Snapshots
- Historial y Logs
- Checkout y Restauración
- Diferencias y Comparaciones
- Fusión y Rebase
- Etiquetas (Tags)
- Stashing
- Networking y Remotos
- Cherry-Picking
- Cerrar Issues
- Estados de archivos
Configuración Inicial
Verificación de la Versión de Git
$ git --version
: Muestra la versión actual de Git instalada.
Ayuda General
$ git --help
: Muestra la ayuda general de Git, incluyendo una lista de los comandos más comunes.
Configuración de Usuario
$ git config --global user.name <nombre>
: Establece el nombre del usuario global para todos los repositorios.
$ git config --global user.email <correo>
: Establece el correo electrónico del usuario global para todos los repositorios.
$ git config user.name
: Muestra el nombre del usuario configurado.
$ git config user.email
: Muestra el correo electrónico del usuario configurado.
Edición de Configuración Global
$ git config --global -e
: Abre el editor configurado para editar el archivo de configuración global de Git.
$ git config --global --edit
: Otra forma de abrir el editor para modificar la configuración global de Git.
Alias en Git
$ git config --global alias.<alias> <comando>
: Crea un alias global para un comando de Git.
Configuración de Rama por Defecto
$ git config --global init.defaultBranch <nombre>
: Establece el nombre de la rama por defecto para nuevos repositorios.
$ git config --global init.defaultBranch main
: Configura ‘main’ como la rama por defecto en nuevos repositorios.
Configuración de UI
$ git config --global color.ui auto
: Habilita colores automáticos en la interfaz de usuario de la línea de comandos para Git.
Gestión de Repositorios
$ git init
: Inicializa un nuevo repositorio Git local. Esto crea un nuevo subdirectorio .git
que contiene todos los archivos necesarios del repositorio.
$ git clone git_url
: Clona un repositorio Git desde la URL especificada. Esto copia todos los datos del repositorio, incluyendo toda la historia de commits.
Gestión de Ramas
$ git branch
: Lista todas las ramas locales en el repositorio actual.
$ git branch <nombreRama>
: Crea una nueva rama local con el nombre especificado.
$ git branch -m <nombre>
: Renombra la rama actual a un nuevo nombre.
$ git branch -m master main
: Renombra la rama ‘master’ a ‘main’.
$ git branch -d <nombreRama>
: Elimina una rama local. Solo se puede eliminar si se han fusionado todos los cambios.
$ git branch -d -f <nombreRama>
: Forza la eliminación de una rama local, incluso si tiene cambios sin fusionar.
$ git branch -vv
: Muestra todas las ramas locales con información adicional sobre cada una, incluyendo su última confirmación y la relación con las ramas remotas.
$ git branch -r
: Lista todas las ramas remotas.
$ git branch -a
: Lista todas las ramas, tanto locales como remotas.
$ git branch -m <new_name>
: Renombra la rama actual a <new_name>
.
Staging y Snapshots
Estado del Repositorio
$ git status
: Muestra el estado del repositorio, incluyendo cambios pendientes, archivos no rastreados, y más.
Adición de Archivos
$ git add <archivo>
: Agrega un archivo específico al área de preparación (staging area).
$ git add .
: Agrega todos los archivos modificados en el directorio actual al área de preparación.
$ git add <archivo1> <archivo2>
: Agrega múltiples archivos específicos al área de preparación.
$ git add *.<extension>
: Agrega todos los archivos con una extensión específica al área de preparación.
$ git add js/*.<extension>
: Agrega todos los archivos con una extensión específica dentro de un directorio particular al área de preparación.
$ git add css/
: Agrega todos los archivos dentro de un directorio específico al área de preparación.
Eliminación de Archivos
$ git rm <archivo>
: Elimina un archivo del directorio de trabajo y del área de preparación.
$ git rm --cached <archivo>
: Elimina un archivo del área de preparación pero lo mantiene en el directorio de trabajo.
$ git rm --cached .
: Elimina todos los archivos del área de preparación pero los mantiene en el directorio de trabajo.
Movimiento y Renombramiento de Archivos
$ git mv <nombreActual> <nombreNuevo>
: Mueve o renombra un archivo o directorio.
Deshacer Cambios
$ git reset <archivo>
: Elimina un archivo específico del área de preparación pero mantiene los cambios en el directorio de trabajo.
$ git reset .
: Elimina todos los archivos del área de preparación pero mantiene los cambios en el directorio de trabajo.
$ git reset --soft HEAD^
: Deshace el último commit manteniendo los cambios en el área de preparación.
$ git reset --soft HEAD^3
: Deshace los últimos tres commits manteniendo los cambios en el área de preparación.
$ git reset --soft <commit>^
: Deshace hasta un commit específico manteniendo los cambios en el área de preparación.
$ git reset --mixed <commit>
: Revierte el HEAD al commit especificado, deshaciendo cambios en el área de preparación pero manteniendo los cambios en el directorio de trabajo.
$ git reset --hard <commit>
: Restablece el HEAD, el área de preparación y el directorio de trabajo al estado de un commit especificado.
$ git reset --hard
: Restablece el HEAD, el área de preparación y el directorio de trabajo al último commit, eliminando todos los cambios.
Committing
$ git commit -m "mensaje"
: Realiza un commit con un mensaje específico.
$ git commit -am "mensaje"
: Agrega todos los archivos modificados al área de preparación y realiza un commit con un mensaje.
$ git commit --amend -m "mensaje"
: Modifica el último commit, permitiendo cambiar el mensaje o añadir más cambios al mismo commit.
$ git commit -am "<Fixes #tag>: <mensaje>"
: Realiza un commit con un mensaje que incluye una referencia a un issue o tag específico.
Historial y Logs
Visualización del Historial de Commits
$ git log
: Muestra el historial completo de commits para el repositorio actual, incluyendo detalles como el autor, la fecha y el mensaje de cada commit.
$ git log --oneline
: Muestra el historial de commits en un formato breve, mostrando cada commit en una sola línea con su identificador abreviado y el mensaje.
$ git log --follow [file]
: Muestra el historial de commits que afectan a un archivo específico, incluyendo los cambios de nombre en el archivo.
Registro de Referencias
$ git reflog
: Muestra un registro de las operaciones realizadas en el repositorio, como commits, rebase, merge, entre otros. Es útil para recuperar versiones anteriores de commits.
Checkout y Restauración
Cambio entre Ramas y Restauración de Archivos
$ git checkout -- .
: Restaura todos los archivos en el directorio de trabajo a su último estado en HEAD, descartando cambios locales no guardados.
$ git checkout <nombreRama>
: Cambia a la rama especificada, actualizando el directorio de trabajo y el índice para reflejar la rama seleccionada.
$ git checkout <tagname>
: Cambia a un tag específico, lo que efectivamente lleva el directorio de trabajo a la versión del código en ese punto en el tiempo.
$ git checkout -b <nombreRama>
: Crea una nueva rama con el nombre especificado y cambia a ella inmediatamente.
$ git checkout -b <nueva-rama> <tagname>
: Crea una nueva rama basada en el tag especificado y cambia a ella inmediatamente.
$ git checkout -
: Cambia a la última rama en la que estabas trabajando. Es un atajo para volver a la rama anterior.
$ git checkout <branch> -- <file>
: Actualiza el archivo especificado en el directorio de trabajo para que coincida con la versión de la rama o tag dado.
Restauración de Archivos usando git restore
$ git restore <archivo>
: Restaura los cambios en un archivo específico a su último estado en HEAD, descartando cambios locales no guardados.
$ git restore .
: Restaura todos los archivos en el directorio de trabajo a su último estado en HEAD, similar al comportamiento de git checkout -- .
.
Diferencias y Comparaciones
$ git diff
: Muestra las diferencias entre el directorio de trabajo y el índice (área de preparación), lo cual es útil para ver los cambios que aún no se han preparado.
$ git diff --staged
: Muestra las diferencias entre los archivos en el área de preparación y el último commit. Es útil para revisar los cambios que están listos para ser confirmados en el próximo commit.
Fusión y Rebase
Git Merge
$ git merge <nombreRama>
: Fusiona la rama especificada con la rama actual. Git intentará realizar un “fast-forward” si es posible, es decir, si no hay cambios conflictivos entre las ramas.
$ git merge [alias]/[branch]
: Fusiona una rama remota especificada con la rama local actual. Esto es común cuando se trabaja con ramas remotas.
$ git merge --no-ff [alias]/[branch]
: Realiza una fusión creando explícitamente un commit de fusión, incluso si el “fast-forward” es posible. Esto ayuda a preservar la historia de las ramas como entidades independientes.
$ git merge --ff-only [alias]/[branch]
: Realiza la fusión solo si se puede hacer un “fast-forward”. Si no es posible, el comando fallará, lo que puede ser útil para asegurar que no se creen commits de fusión adicionales.
Git Rebase
$ git rebase <rama>
: Reaplica los commits de la rama actual sobre la base de la rama especificada. Esto se utiliza para “trasladar” una serie de cambios de una rama a otra, modificando la base de los commits.
$ git rebase -i HEAD~3
: Inicia un rebase interactivo de los últimos tres commits. Esto permite editar, reordenar, combinar o eliminar commits de manera interactiva.
$ git rebase -i <hash>
: Inicia un rebase interactivo a partir del commit especificado por el hash. Permite ajustar los commits desde ese punto en adelante.
$ git rebase -i HEAD~4
: Similar al comando anterior, pero aplicado a los últimos cuatro commits, permitiendo una edición interactiva de esos commits.
Notas Adicionales
-
Merge vs Rebase: Mientras que
merge
preserva la historia exacta de los cambios,rebase
reescribe la historia para que parezca que todos los cambios se realizaron en una línea temporal más limpia. Esto puede simplificar la historia visual del proyecto pero debe usarse con cuidado, especialmente en ramas compartidas. -
Uso de Rebase Interactivo: Es una herramienta poderosa para limpiar la historia antes de integrar los cambios a una rama principal. Puede hacer que los commits sean más comprensibles y gestionables.
-
Precaución con Rebase: Al cambiar la historia de commits,
rebase
puede complicar el proceso de colaboración en ramas compartidas. Siempre es bueno coordinar con el equipo antes de hacer rebase en ramas que otros podrían estar usando.
Etiquetas (Tags)
Las etiquetas (tags) en Git se utilizan comúnmente para marcar puntos específicos en la historia del repositorio, como lanzamientos de versiones.
Listar Tags
$ git tag
: Lista todos los tags en el repositorio actual.
Crear Tags
$ git tag -a <versionSemantica>
: Crea un tag anotado con la versión semántica especificada. Los tags anotados incluyen metadatos adicionales como el nombre del autor, la fecha, y un mensaje asociado, y se consideran más completos.
$ git tag -a <versionSemantica> -m "mensaje"
: Crea un tag anotado y permite especificar un mensaje de etiquetado en la línea de comando sin necesidad de un editor.
$ git tag -a <versionSemantica> <Hash> -m "mensaje"
: Crea un tag anotado en un commit específico identificado por su hash. Útil para etiquetar commits anteriores retroactivamente.
Eliminar Tags
$ git tag -d <versionSemantica>
: Elimina el tag especificado del repositorio local.
Mostrar Información de un Tag
$ git show <tag>
: Muestra información sobre el tag especificado, incluyendo el commit al que está asociado, el mensaje del tag, y los cambios en ese commit.
Empujar etiquetas con Git
$ git push --tags
: Empujar todas las etiquetas locales al remoto.
$ git push origin <tag>
:Empujar una etiqueta específica al remoto.
Stashing
$ git stash
: Guarda de manera temporal los cambios en archivos rastreados que no han sido commiteados, permitiendo tener un directorio de trabajo limpio.
$ git stash save "nombre del stash"
: Guarda los cambios en un stash con un nombre específico para identificarlo fácilmente.
Listar Stashes
$ git stash list
: Muestra una lista de todos los stashes almacenados.
$ git stash list -p --stat
: Muestra una lista de todos los stashes junto con las estadísticas y el parche de cambios de cada stash.
Aplicar Stashes
$ git stash pop
: Aplica el último stash guardado y luego lo elimina de la lista de stashes.
$ git stash apply stash@{n}
: Aplica el stash especificado por su índice sin eliminarlo de la lista de stashes.
Eliminar Stashes
$ git stash drop
: Elimina el último stash de la lista.
$ git stash drop stash@{n}
: Elimina el stash especificado por su índice.
$ git stash clear
: Elimina todos los stashes guardados.
Mostrar Contenido de Stashes
$ git stash show -p stash@{n}
: Muestra los cambios específicos almacenados en el stash indicado.
Networking y Remotos
Gestión de Ramas Remotas
$ git push origin :<rama>
: Elimina una rama en el repositorio remoto.
$ git push origin --delete <old>
: También elimina una rama en el repositorio remoto.
Publicar Cambios
$ git push origin -u <new_name>
: Sube cambios a la rama especificada y establece el seguimiento con la rama remota.
$ git push --set-upstream origin <rama>
: Similar al anterior, sube la rama local al remoto y establece el seguimiento.
$ git push [alias] [branch]
: Sube cambios a la rama especificada en el repositorio remoto definido por el alias.
Obtener Cambios
$ git pull
: Descarga cambios y fusiona automáticamente desde el repositorio remoto a la rama actual.
$ git pull upstream <rama>
: Descarga cambios de la rama especificada del repositorio upstream y los fusiona con la rama local.
$ git pull --all
: Descarga cambios de todas las ramas del repositorio remoto.
$ git pull --rebase
: Descarga los cambios y los rebasea sobre la rama actual.
Manejo de Repositorios Remotos
$ git fetch [alias]
: Descarga objetos y referencias desde otro repositorio especificado por el alias.
$ git remote add upstream <url>
: Agrega un nuevo repositorio remoto llamado “upstream”.
$ git remote add [alias] [url]
: Agrega un nuevo repositorio remoto con un alias específico.
$ git remote set-url origin [git_url]
: Cambia la URL del repositorio remoto “origin”.
$ git remote rm [remote repo name]
: Elimina la configuración del repositorio remoto especificado.
$ git remote prune origin
: Limpia referencias obsoletas de ramas ya eliminadas en el repositorio remoto “origin”.
Cherry-Picking
`$ git cherry-pick [commit_id]: Aplica los cambios introducidos por el commit especificado en la rama actual. Este comando es útil para integrar cambios específicos de una rama a otra sin necesidad de fusionar o rebasear toda la rama.
Cerrar Issues
Cuando trabajas con GitHub o plataformas similares, puedes cerrar issues automáticamente al incluir ciertas palabras clave en tus mensajes de commit. Esto ayuda a mantener una relación clara entre los commits y los issues específicos que resuelven, mejorando la trazabilidad y la documentación del proyecto.
Palabras Clave para Cerrar Issues
- close
- closes
- closed
- fix
- fixes
- fixed
- resolve
- resolves
- resolved
Estas palabras clave pueden ser utilizadas en los mensajes de commit para indicar que los cambios realizados en dicho commit resuelven un issue. Deben ser seguidas por el número del issue que se desea cerrar.
Ejemplo de Uso
Supongamos que tienes un issue abierto con el número 123 que trata sobre un bug en tu aplicación. Puedes cerrar este issue directamente desde un commit con el siguiente mensaje:
git commit -m "Fixes #123 - Se corrige el error en la función de login"
Estados de archivos
-
M (Modified): Modificado desde el último commit.
-
A (Added): Añadido al índice para el próximo commit.
-
D (Deleted): Eliminado y listo para el próximo commit.
-
R (Renamed): Renombrado desde la última confirmación.
-
C (Copied): Copiado desde otro archivo.
-
U (Unmerged): En conflicto después de un merge.
-
?? (Untracked): No está bajo control de versiones.
-
! (Ignored): Ignorado según el archivo .gitignore.
-
X (Unknown): Un estado no reconocido o un archivo no rastreado en el índice.