git
Git básico
Configuración
- Ver la configuración
git config -l
- Configurar nombre
git config --global user.name "Roberto Hernando"
- Configurar correo
git config --global user.email "hervelro@jcyl.es"
Comandos básicos
- Añadir ficheros al repositorio local
git add readme.md
git add .
- Subir últimos cambios al repositorio local
git commit -m "Comentario"
- Ver información del repositorio
git status
- Ver los cambios:
git log
de forma detallada:
git log --patch
- No se quiere subir algún cambio (unstaging) en el próximo commit:
git reset HEAD readme.md
para volverlo a añadir al commit siguiente, se usaría
git add
.
Directorios
Git no versiona directorios, solo ficheros.
[!TIP] Directorios vacíos
Si se quiere tener un directorio vacío en el repositorio, para que git lo tenga en cuenta, lo que se hace es añadir en el directorio un fichero vacío llamado.gitkeep
Ficheros no versionados
Mediante el fichero .gitignore
le podemos indicar a git qué ficheros no queremos que sean versionados en el repositorio.
Fetch
El comando git fetch
en Git se utiliza para descargar commits, archivos y referencias desde un repositorio remoto al repositorio local.
¿Qué hace git fetch
?
- Descarga de Datos:
git fetch
descarga los datos del repositorio remoto, incluyendo commits, archivos y referencias (como ramas y etiquetas), pero no los fusiona automáticamente con el trabajo local. - Seguridad: Es una operación segura porque no cambia el código local ni las ramas activas. Solo actualiza las referencias remotas en el repositorio local.
- Preparación para la Fusión: Después de usar
git fetch
, se pueden revisar los cambios descargados y decidir si se quiere fusionarlos con el trabajo local usandogit merge
ogit rebase
.
¿Cómo usar git fetch
?
-
Fetch desde el remoto por defecto (generalmente
origin
):git fetch
Esto descarga todos los cambios del repositorio remoto configurado como
origin
. -
Fetch desde un remoto específico:
git fetch <nombre-del-remoto>
-
Fetch de todas las ramas de todos los remotos:
git fetch --all
Esto descarga todos los cambios de todos los remotos configurados en el repositorio.
Diferencia entre git fetch
y git pull
git fetch
: Solo descarga los datos del remoto y los almacena en el repositorio local sin fusionarlos con el trabajo actual.git pull
: Combinagit fetch
ygit merge
en un solo comando. Descarga los datos del remoto y los fusiona automáticamente con la rama activa.
Ramas
- Creación de una nueva rama
git checkout -b <nombre_rama>
- Cambiar de rama
git checkout <nombre_rama>
Fusión de ramas
git merge <rama_desde_la_que_se_fusiona>
Rebasamiento de commits
Lo que se hace es tomar los commits de otra rama (habitualmente será el master) y después hacer commit de los cambios en la rama actual. Es como resincronizar el trabajo de nuestra rama con lo que se está haciendo en la rama principal.
Evita muchos conflictos al fusionar las ramas.
git rebase master
Resolución de conflictos al fusionar ramas
Para interrumpir un merge que dé problemas (porque queremos seguir trabajando y resolverlo posteriormente):
git merge --abort
Ídem para git rebase
Una vez que se ha resuelto el conflicto, es suficiente con hacer git add
del fichero corregido y hacer commit.
Comandos avanzados
1. Git reflog
¿Alguna vez has cometido un error tan grave que deseaste poder retroceder en el tiempo? git reflog es la máquina del tiempo que no sabías que tenías.
Qué hace:
Rastrea todo lo que has hecho en tu repositorio, incluso los commits que creías perdidos.
Cuándo usarlo:
- Has borrado una rama accidentalmente.
- Necesitas recuperar un commit después de un reinicio incorrecto.
Comando:
git reflog
2. Git cherry-pick
Imagina esto: hay un commit perfecto en otra rama, y lo necesitas ahora sin fusionar toda la rama. Ahí es donde entra git cherry-pick
.
Qué hace:
Te permite seleccionar commits específicos de una rama y aplicarlos a otra.
Cuándo usarlo:
- Quieres una corrección de errores de
feature-branch
enmain
sin fusionar toda la rama.
Comando:
git cherry-pick <commit-hash>
3. Git bisect
¿Depurando un error que apareció de repente? En lugar de comprobar manualmente cada commit, deja que Git haga el trabajo de detective por ti.
Qué hace:
Realiza una búsqueda binaria en tu historial de commits para encontrar el commit exacto que introdujo el error.
Cuándo usarlo:
- Cuando tienes un error, pero no estás seguro de qué commit lo causó.
Comando:
git bisect start git bisect bad # Marca el commit actual como malo git bisect good <commit-hash> # Marca un commit conocido como bueno
Git seguirá reduciendo los commits hasta que encuentre al culpable.
4. Git stash pop
Has estado ahí: a mitad de la codificación cuando llega un informe de error crítico. Necesitas cambiar de rama sin perder tu trabajo.
Qué hace:
Guarda tus cambios no confirmados para que puedas volver a ellos más tarde.
¿Por qué pop?
git stash
guarda tu trabajo, pero git stash pop
lo restaura y lo elimina de la lista de almacenamiento, manteniendo las cosas ordenadas.
Comando:
git stash pop
5. Git reset --soft
¿Alguna vez has hecho un commit y te has dado cuenta de que aún no estabas listo? ¿Quizás olvidaste aplastarlo con el anterior?
Qué hace:
Mueve tu commit de vuelta al área de preparación sin perder tus cambios.
Cuándo usarlo:
- Quieres volver a trabajar un commit sin perder el progreso.
Comando:
git reset --soft HEAD~1
6. Git blame
Sí, el nombre suena acusatorio, pero no se trata de señalar con el dedo (o quizás sí).
Qué hace:
Muestra quién modificó por última vez cada línea de un archivo.
Cuándo usarlo:
- Estás intentando entender por qué se hizo un cambio en particular.
Comando:
git blame <file>
7. Git log --oneline --graph
Mirar un repositorio con múltiples ramas puede ser abrumador. Este comando te da una vista de pájaro de tu proyecto.
Qué hace:
Muestra tu historial de commits en un formato simple y visual.
Cuándo usarlo:
- Para entender el historial de una rama o cómo las ramas divergieron y se fusionaron.
Comando:
git log --oneline --graph --all
8. Git clean -f
A veces, tu directorio de trabajo se ensucia: archivos no rastreados acumulándose por todas partes. git clean
es como una limpieza de primavera para tu repositorio.
Qué hace:
Elimina los archivos no rastreados de tu directorio de trabajo.
Cuándo usarlo:
- Has intentado
git pull
, pero falla debido a archivos no rastreados conflictivos.
Comando:
git clean -f
9. Git rebase -i
El rebase interactivo es la varita mágica para limpiar historiales de commits desordenados.
Qué hace:
Te permite aplastar, editar o eliminar commits durante un rebase.
Cuándo usarlo:
- Antes de fusionar, para que tu historial de commits se vea limpio y profesional.
Comando:
git rebase -i HEAD~<número-de-commits>
Consejo profesional: Usa esto con moderación en ramas públicas para evitar conflictos.
10. Git diff --staged
Antes de confirmar, ¿no sería bueno ver exactamente qué está preparado? Ahí es donde entra git diff --staged
.
Qué hace:
Muestra los cambios entre tu área de preparación y tu último commit.
Cuándo usarlo:
- Para verificar los cambios preparados antes de confirmarlos.
Comando:
git diff --staged
¿Cuáles de estos comandos son nuevos para ti? ¿O tienes un favorito infravalorado que no está en la lista? ¡Cuéntanoslo en los comentarios!
Gitlab
En https://gitlab.com/ tengo el usuario robertohernando
, donde puedo hacer pruebas.
Es necesario generar una clave SSH para poder conectarse (ver https://docs.gitlab.com/ee/user/ssh.html).
Subiendo cambios a un repositorio Gitlab
Referencias
- Udemy - Introduction to Git for Gitlab
- Oh" target="_blank" rel="noopener noreferrer">https://ohshitgit.com/">Oh Shit, Git!?!