Es el área donde se puede guardar temporalmente los cambios que no se han hecho commit. Esto permite cambiar de rama o realizar otras operaciones sin tener que hacer un commit de los cambios actuales. Puede almacenar n estados y funciona como una pila, colocando siempre de primero los últimos cambios que salvemos.
Es el lugar donde trabajas con los archivos de tu proyecto. Aquí es donde creas, modificas y eliminas archivos. Los cambios que haces en esta zona no se registran automáticamente en Git.
Es un área intermedia entre tu directorio de trabajo y tu repositorio local. Aquí colocas los archivos que quieres incluir en tu próximo commit. Puedes pensar en esta zona como un "escenario" donde preparas lo que se va a guardar en el siguiente commit.
Es donde Git almacena permanentemente la historia de tus commits. Es una carpeta oculta llamada .git dentro de tu directorio de trabajo. Aquí se encuentran todos los commits y las ramas de tu proyecto.
Es una copia del repositorio local que se encuentra en un servidor remoto. Permite la colaboración entre diferentes desarrolladores al proporcionar un lugar centralizado donde se pueden cargar (push) y descargar (pull) los cambios.
El comando git add
se utiliza para preparar archivos o cambios específicos para ser incluidos en el próximo commit. Básicamente, añade los cambios realizados en los archivos al área de preparación (también conocida como "staging area").
Añadir un archivo específico:
git add <file_name>
Añadir todos los archivos:
git add .
Con este comando pasaremos nuestros cambios del Working Directory
al Staging Area
.
El comando git branch
es utilizado para gestionar ramas en un repositorio.
Listar Ramas:
git branch
Crear una Nueva Rama:
git branch <branch_name>
Cambiar a una Rama Existente:
git checkout <branch_name>
Crear y Cambiar a una Nueva Rama:
git checkout -b <branch_name>
Eliminar una Rama:
git checkout -d <branch_name>
Reenombrar una Rama:
git branch -m <old_name> <new_name>
El comando git clone
se utiliza para crear una copia local de un repositorio Git existente. Básicamente, te permite descargar todo el historial de versiones, archivos y ramas de un repositorio remoto en tu máquina local.
git clone REPOSITORY_URL
El comando git checkout
tiene varias funcionalidades, dependiendo del contexto en el que se utiliza. Se puede ejecutar sobre archivos, commits y ramas.
Cambiar a una rama existente:
git checkout <branch>
Crear rama y cambiarme a ella:
git checkout -b <branch>
Cambiar a una rama remota:
git fetch
git checkout -b <remotebranch> origin/<remotebranch>
detached HEAD
El HEAD es la forma en la que Git hace referencia al commit actual, De forma interna, el comando git checkout simplemente actualiza el HEAD para que apunte a la rama o al commit indicado. Cuando se hace git checkout
a una rama, no hay ningun problema, pero cuando haces git checkout
de un commit, pasa al estado detached HEAD
.
El detached HEAD
es un estado que indica que estas desconectado del desarrollo del proyecto, en donde puedes mirar el proyecto, hacer pruebas, cambiar archivos e incluso hacer commits sin impactar ninguna rama, es decir todo lo que se haga en este estado se perdera cuando cambies a una de las ramas existentes. Sí se quisiera mantener estos nuevos cambios o funcionalidades se debe crear una nueva rama en donde si quedaran rastreados estos cambios y los commits asociados.
El desarrollo del codigo siempre debe hacerse en una rama no en commit y por ende en un estado detached HEAD
, de esta manera siempre tendremos una referencia a la cual hacer nuevos commits. Este estado es util para hacer pruebas o revisar commits anteriores y luego continuar trabajando con nuestra como antes.
Cambiar a una commit antiguo:
git checkout -b <commit>
El comando git commit
se utiliza para crear un nuevo punto de control en la historia de versiones de tu proyecto. Un "commit" representa un conjunto de cambios que se han preparado y confirmado en tu repositorio (se le asigna un identificador unico asociado a este commit llamado hash por el cuando se puede rastrear).
git commit -m "commit description"
Es importante tener en cuenta que los commits son locales hasta que se envían al repositorio remoto utilizando el comando git push
. Esto significa que otros colaboradores no podrán ver tus commits hasta que los envíes al servidor central.
Con este comando pasaremos nuestros cambios del Staging Area
al Local Repository
.
Otra utilidad de este comando es el git commit --amend
es una herramienta útil que te permite realizar cambios adicionales al commit más reciente en tu historial. Esto puede ser útil si olvidaste incluir algunos archivos o cometiste errores en el mensaje de commit.
git commit --amend
Si solo deseas cambiar el mensaje del commit, simplemente editas el texto, guardas y cierras el editor. Si deseas incluir archivos adicionales, los añades al staging area con git add
y luego ejecutas git commit --amend
Al ejecutar este comando se abrira nuestro editor de texto y hacer uso de los siguientes comandos:
i
para poder escribir, con esto vamos a poder editar el mensaje del commit.esc
para dejar de escribir.:wq
:w
se utiliza para guardar el archivo que estás editando, mientras que:q
se utiliza para salir del editor. Si realizas ambos comandos juntos,:wq
estarás guardando el archivo y saliendo del editor en un solo paso.
Es importante tener en cuenta que cuando haces esto, se crea un nuevo commit que reemplaza al anterior en tu historial. Esto significa que el commit original se elimina y se reemplaza por el nuevo commit con el mensaje y/o los archivos actualizados. Por lo que solo se debe utilizar con commits que esten en nuestro repositorio local, si ya hemos subido un commit al remoto en vez de usar este comando es mejor hacer un nuevo commit con los cambios nuevos.
El comando git config
se utiliza para configurar variables específicas de Git a nivel local o global.
Ver la configuración actual:
git config --list
Configurar el nombre de usuario:
git config --global user.name "Name"
Configurar el correo electrónico:
git config --global user.email "[email protected]"
Configurar alias:
git config --global alias.aliasName "command"
Usar alias:
git aliasName
--global
se aplica a todos los repositorios, mientras que si se omite, la configuración es específica para el repositorio actual.
Esta configuración se guarda en nuestra carpeta git/config y prodríamos ver algo como esto:
[user]
name = Name
email = [email protected]
[alias]
aliasName = command
El comando git diff
te permite ver las diferencias entre los cambios que has realizado en tu repositorio local y el estado actual del repositorio (ya sea el último commit o el estado en una rama específica). Es importante resaltar que solo muestra las diferencias; no realiza cambios en tu repositorio. Es una herramienta útil para entender qué cambios has realizado antes de confirmarlos con un commit.
Diferencias entre el área de trabajo y el área de ensayo (staging area):
git diff
Diferencias entre el área de ensayo (staging area) y el último commit:
git diff --staged
Diferencias entre dos commits:
git diff <commit1> <commit2>
Diferencias entre una rama y otra:
git diff <branch1>..<branch2>
El comando git fetch
es utilizado para obtener los últimos cambios de un repositorio remoto en tu repositorio local. Sin embargo, no fusiona estos cambios con tu rama actual.
git fetch
Enlaces de interés:
El comando git log
es utilizado para ver el historial de commits en un repositorio. Este comando muestra una lista de los commits en orden cronológico inverso, lo que significa que el commit más reciente aparece primero.
git log
Cada entrada del registro (log entry) muestra información sobre un commit, incluyendo:
- Commit Hash: Un identificador único para el commit, generalmente un conjunto de caracteres alfanuméricos.
- Autor: El nombre del autor del commit.
- Fecha y Hora: La fecha y hora en la que se realizó el commit.
- Mensaje del Commit: El mensaje asociado con el commit, que proporciona información sobre los cambios realizados.
Al ejecutar este comando veriamos algo como esto:
commit 6dcb09b8e12b4a1ae86f3398c8b04a67e2b2dc45 (HEAD -> main, origin/main)
Author: author <[email protected]>
Date: Thu Sep 23 15:22:07 2021 -0700
message
commit 32a15e0cb64bfcbf00a07e845c071d9116717910
Author: author <[email protected]>
Date: Wed Sep 22 09:18:54 2021 -0700
message
Puedes usar varios argumentos y opciones con git log para personalizar la salida según tus necesidades. Por ejemplo, puedes limitar la cantidad de commits mostrados, filtrar por autor, buscar commits que contengan ciertas palabras clave, entre otras cosas.
Recomendado para verlo mejor:
git log —graph —pretty=oneline
Al ejecutar este comando veriamos algo como esto:
* 42c31d1bb428d78d25251e855dcb0d06d0be2615 (HEAD -> main, origin/main) message
* 8c6cec21ba4158998e4699259ad096bb4e6b9a20 message
* 5b8b9e5053a5e173e2806d9b4f883848232ee34c Merge pull request message
|\
| * effba8cf48cf84a46f5894ec2b2529799cabfa2e (origin/branch) message
|/
* 6a0ecb3fb75885d389c14e0a5549180897c4eedd message
El comando git merge
se utiliza para combinar cambios de una rama a otra. Básicamente, toma los cambios de una rama fuente y los fusiona con otra rama objetivo. Esto puede ser útil cuando estás trabajando en un proyecto con múltiples ramas y deseas combinar el trabajo que has realizado en una rama específica con la rama principal o con otra rama.
git merge <branch>
Cuando ejecutas git merge
, Git intentará combinar los cambios automáticamente. Sin embargo, en algunos casos, si hay conflictos (es decir, cambios incompatibles en el mismo lugar del código), Git no podrá hacer la fusión automáticamente y te pedirá que resuelvas los conflictos manualmente.
El comando git pull
es utilizado para combinar los cambios de un repositorio remoto en tu repositorio local. Es una forma rápida de actualizar tu repositorio local con los cambios más recientes del repositorio remoto.
git pull
Enlaces de interés:
El comando git push
es utilizado para enviar los commits locales (es decir, los cambios confirmados en tu repositorio local) al repositorio remoto. Esto actualiza la rama correspondiente en el servidor remoto con los cambios que has realizado en tu repositorio local.
Sintaxis basica:
git push <repository> <branch>
Sintaxis por defecto, en donde tomara el repositorio como origin y la branch sera en la que nos encontramos:
git push
Con este comando pasaremos nuestros cambios del Local Repository
al Remote Repository
.
El comando git reflog
es utilizado para ver el registro de referencia de Git, que es una lista detallada de los cambios de posición de las referencias de Git a lo largo del tiempo. Esto incluye los cambios de posición de las ramas (como HEAD, ramas locales y ramas remotas) y etiquetas.
Este comando es útil para recuperar cambios perdidos o deshacer acciones accidentalmente realizadas, ya que proporciona un historial detallado de las operaciones que has realizado en tu repositorio local.
git reflog
Al ejecutar este comando veriamos algo como esto:
2d2c7e5 (HEAD -> master) HEAD@{0}: commit: Fixed issue #123
a1b2c3d HEAD@{1}: commit: Updated README.md
3e4f5g6 HEAD@{2}: checkout: moving from feature-branch to master
56789ab HEAD@{3}: commit (merge): Merge branch 'feature-branch'
Cada entrada en la lista proporciona información sobre:
- El hash del commit (2d2c7e5, a1b2c3d, etc.): Este es un identificador único para un commit en Git.
- La referencia (HEAD, master, etc.): Indica la referencia que se movió en esa operación (por ejemplo, HEAD o el nombre de una rama).
- El tipo de acción (commit, checkout, merge, etc.): Indica qué tipo de operación se realizó.
- El mensaje del commit: Proporciona el mensaje asociado con el commit.
El comando git remote
es utilizado para administrar los repositorios remotos en Git. Puedes usarlo para ver, agregar y eliminar repositorios remotos asociados a tu proyecto.
Listar nombres de los repositorios remotos asociados con tu proyecto:
git remote
Listar nombres y url de los repositorios remotos asociados con tu proyecto:
git remote -v
Agregar un nuevo repositorio remoto:
git remote add <name> <url>
Elimina un repositorio remoto:
git remote remove <name>
Renombra un repositorio remoto:
git remote rename <name> <new_name>
Cambia la URL de un repositorio remoto:
git remote set-url <name> <url>
Traer cambios desde un repositorio remoto:
git fetch <name>
Traer y fusionar cambios desde un repositorio remoto:
git pull <name> <branch>
Enviar cambios a un repositorio remoto:
git push <name> <branch>
Enlaces de interés:
El comando git reset
es utilizado para deshacer cambios. Se utiliza principalmente de tres formas distintas, usando los siguientes argumentos --soft
, --mixed
y --hard
.
git reset <arg> <commit>
--soft
actualiza el historial de commits dejando de primero al commit especificado y todos los cambios que se hayan deshecho quedan en el staging area.--mixed
es el modo de funcionamiento predeterminado. Actualiza el historial de commits dejando de primero al commit especificado y todos los cambios que se hayan deshecho se mueven al working directory.--hard
es la opción más directa, peligrosa y habitual. Actualiza el historial de commits dejando de primero al commit especificado y todos los cambios que se hayan deshecho se perderan, dejando el working directory como se encontraba en el commit indicado.
No usarlo en repostiorios remotos
No se debe utilizar nunca git reset
sobre ningun commit que se haya publicado en un repositorio remoto, ya que es muy probable que el resto de desarrolladores dependan de ella.
Eliminar un commit que otros desarrolladores han seguido desarrollando supone un problema grave para la colaboración. Cuando intenten sincronizarse con tu repositorio, parecerá que un pedazo del historial del proyecto ha desaparecido repentinamente.
Cuando agregues un nuevo commit despueste de hacer un git reset
, Git te alertara que tu historial local no coincide con el historial remoto, ya que en tu local has eliminado una cierta cantidad de commits que siguen apareciendo en el remoto.
Por lo tanto solo se debe usar git reset
en tu repositorio local, y no en commits que han sido publicados. Si necesitas arreglar un commit de un repositorio remoto, el comando git revert
ha sido creado especificamente para este proposito.
El comando git revert
es utilizado para deshacer cambios efectuados en el historial de commits de un repositorio, En lugar de eliminar el commit del historial del proyecto, invierte los cambios introducidos por el commit indicado y creara un nuevo commit con el contenido inverso resultante. Con esto no se altera el historial de commits, sino que simplemente tendremos un nuevo commit en el historial con los cambios revertidos, lo cual resulta importante ya que no afecta el desarrollo del resto del equipo.
git revert <commit>
git revert
presenta dos ventajas importantes con respecto al git reset
.
- No cambia el historial de commits del proyecto, lo que la convierte en una operación "segura" para los commits que ya se han publicado en un repositorio compartido.
- El comando
git revert
puede dirigirse a un commit en concreto de manera arbitraría dentro del historial es decir no afecta todos los commits previos al que queremos, mientras quegit reset
solo puede volver hacia atrás desde el commit actual, teniendo que eliminar cada uno de los commits previos.
El comando git show
es utilizado para ver información detallada sobre un commit específico.
Ver detalles del último commit:
git show
Ver un commit específico por su hash:
git show <commit>
Ver los cambios en un archivo específico en un commit:
git show <commit> example.txt
Ver cambios en un directorio específico en un commit:
git show <commit> directory/
Renombra un repositorio remoto:
git remote rename <name> <new_name>
Ver cambios de forma Compacta:
git show --compact-summary
Algunas opciones adicionales con el comando git show, para cambiar la forma en que se muestra la información:
----compact-summary
Muestra un resumen mas compacto.--name-only
Muestra solo los nombres de los archivos alterados.--name-status
Muestra los nombres de los archivos y el estado de los cambios (adiciones, modificaciones, eliminaciones, etc.).
El comando git stash
se utiliza para guardar temporalmente los cambios locales que no están listos para ser comprometidos en un área especial llamada "stash". Esto te permite cambiar de rama o realizar otras operaciones sin tener que comprometer tus cambios locales.
Listar Stashes:
git stash list
Guardar Cambios en el Stash:
git stash
Guardar Cambios en el Stash con nombre:
git stash save <name>
Aplicar y Eliminar un Stash:
git stash pop
Aplicar un Cambio en especifico del Stash:
git stash apply N
Eliminar un Stash Específico:
git stash drop N
Limpiar Todos los Stashes:
git stash clear
El comando git status
te permite mostrar el estado actual del repositorio.
git status
El comando git switch
se utiliza para cambiar entre ramas en un repositorio.
Cambiarme a una rama:
git switch <branch>
Crear una rama y cambiarme a ella:
git switch -c <branch>
Enlaces de interés:
El comando git tag
se utiliza para etiquetar puntos específicos en la historia de un repositorio. Estas etiquetas se utilizan comúnmente para marcar versiones de software importantes (como versiones estables para producción) para que puedan ser fácilmente referenciadas en el futuro.
Listar todas las etiquetas:
git tag
Crear una etiqueta ligera (Lightweight Tags):
git tag <name>
Crear una etiqueta anotada (Annotated Tags):
git tag -a <name> -m "message"
Buscar etiquetas con un patron:
git tag -l <pattern>
Eliminar una etiqueta:
git tag -d <name>
Compartir una etiqueta al repositorio remoto:
git push origin <name>
Compartir varias etiquetas al repositorio remoto:
git push origin --tags
Para trabajar con múltiples repositorios remotos, podemos trabajar de la siguiente manera:
Clonar un repositorio remoto que sera mi origin:
git clone <url>
Agregar otro repositorio remoto:
git remote add <name> <url>
Listado de repositorios remotos con url:
git remote -v
Ya estamos trabajando con dos repositorios, todos los cambios sin indicar el repositorio se subiran al origin, ahora vamos a subir cambios a los repositorios:
Subir cambios al repositorio origin:
git add .
git commit -m "message"
git push
Subir cambios a otro repositorio:
git push <name> <branch>
En caso que necesite traer cambios de otro repositorio remoto a mi repositorio origin, debo hacer lo siguiente:
Traer y fusionar cambios de otro repositorio:
git pull <name> <name>
Subir cambios a mi repositorio origin:
git push origin <branch>
Enlaces de interés:
Para trabajar en una rama remota que no tienes en tu repositorio local, necesitas seguir estos pasos:
Descargar ultimos cambios del repositorio remoto:
git fetch
Listar ramas locales y remotas del repositorio:
git branch -a
Crear una copia local de la rama remota:
git checkout -b <remote_branch> origin/<remote_branch>
Enlaces de interés:
git fetch
descarga las referencias (ramas, etiquetas, etc.) de un repositorio remoto a tu repositorio local. Sin embargo, no fusiona estos cambios con tu rama actual. Básicamente, actualiza tu conocimiento sobre lo que ha sucedido en el repositorio remoto, pero no hace cambios en tu código local.
git pull
descarga las referencias (ramas, etiquetas, etc.) de un repositorio remoto a tu repositorio local, pero además, fusiona automáticamente los cambios de la rama remota en tu rama local. En otras palabras, git pull
es básicamente un git fetch
seguido de un git merge
.
En resumen, git fetch
trae los cambios del repositorio remoto a tu repositorio local sin hacer ninguna fusión, mientras que git pull
hace lo mismo pero además fusiona los cambios automáticamente en tu rama local actual.
git switch
fue introducido con el propósito específico de cambiar entre ramas. Su sintaxis es más concisa y se centra principalmente en el cambio de ramas.
git checkout
es un comando más antiguo y versátil que puede utilizarse para muchas otras operaciones además de cambiar entre ramas. Su sintaxis es más amplia y puede utilizarse para una variedad de operaciones, como la creación de nuevas ramas, deshacer cambios o moverte a un commit específico.
En resumen, git switch
está diseñado para hacer cambios entre ramas de manera más segura. No permite cambiar a una rama si hay cambios sin commitear que puedan entrar en conflicto con los cambios de la nueva rama. mientras que git checkout
puede ser usado para cambiar entre ramas incluso si tienes cambios sin commitear. Esto puede llevar a la pérdida de cambios si no se maneja correctamente..
El archivo .gitignore
es un archivo especial en un repositorio que le indica a Git qué archivos o patrones de archivos debe ignorar al realizar operaciones como git add y git commit. Esto significa que los archivos y directorios listados en el .gitignore
no serán rastreados por Git.
El propósito principal de usar .gitignore
es evitar que se incluyan en el control de versiones archivos que no son relevantes para el desarrollo del proyecto o que pueden generarse automáticamente a partir de otros archivos.