
Hola en esta ocasión hablaremos de Git
donde explicaremos paso a paso como funciona y el alcance que tiene que hace que sea necesario aprenderlo cuanto antes, asi que preparate por que debes aprender a usarlo a la de ya!.
Indice y Estructura
- Que es Git?
- Control de Versiones
- Repositorio
- Commit - Comprometer
- Instalación
- Configuración
- Creación del Repositorio
- Areas de Git
- Estados de Git
- Estado del Repositorio
- Creación de un Commit
- Branch - Ramas
- Merge - Fusionar Branchs
- Conexión con Github
Que es Git? #
Es un sistema de control de versiones que nos va a permitir rastrear todos lo cambios que hemos hecho en un conjunto de archivos.
Control de Versiones #
Viene a ser un sistema encargado de administrar los cambios que hemos realizado en un conjunto de archivos o en programas de computadora.
Repositorio #
Es un conjunto o colección de archivos de distintas versiones de un proyecto.
Existen 2 tipos de de reposototios:
Repositorio local #
Es local cuando esta almacenado unicamente en la pc que lo creamos donde solo nosotros tendremos acceso a el.
Repositorio Remoto #
Cuando queremos dar acceso a otros desarrolladores o colaboradores a nuestro repositorio o para tener una copia segura guardada en un servidor externo, creamos servidores remotos.
Ambos tipos de repositorios trabajan juntos ya que podemos crear una copia local de un repositorio remoto en nuestra pc como local y podemos enviar tambien el repositorio local que creamos a un repositorio remoto.
Commit - Comprometer #
Son un registro del estado de un proyecto en un momento especifico, a lo largo de la vida del proyecto.
Supongamos que creamos un archivo, editamos el archivo, creamos una carpeta y borramosel archivo: cada una de estas acciones vendria a ser un commit
Instalación #
Para poder instalar Git
si estamos en windows
debemos ir a la pagina oficial para poder descargalo y al ejecutarlo solo debemos seguir los pasos por defecto:
En nuestro caso ya que trabajaremos en linux
por ser mas comodo unicamente neceistamos ejecutar el comando apt install git
y ya lo tendriamos instalado
En cuanto a lo demas todo es exactamente igual para cualquier sistema operativo en cuanto al desarrollo del curso despues de la instalación
Configuración #
Una vez tengamos ya instalado Git
en nuestro sistema para comenzar a trabajar vamos a crear un directorio en un ruta de nuestro sistema.
En este caso creare el directorio miGit
usando el comando mkdir
y con cd
ingresare al directorio
❯ mkdir miGit
❯ cd miGit
Ahora procederemos a configurar algo muy importante en Git
que seria nuestro usuario y correo, ya que cada vez que creeemos un commit
se registrara la información de quien realizo el cambio. Esto es util ya que si estamos trabajando en un proyecto colaborativo, cada uno de los desarrolladores del proyecto podran saber quien realizo ese cambio y cual es su correo asociado; de igual manera si solo nosotros estamos trabajando en el proyecto podemos saber en un futuro que cambio realizamos.
Para poder realizar la configuración del nombre de usuario
solo debemos ejecutar el siguiente comando.
❯ git config --global user.name "Firtsmiracle"
cabe mencionar que si unicamente deseamos esta configuración para un unico proyecto debemos omitir el uso de la bandera --global
, pero al ser nosotros dueños del repositorio es recomendable hacerlo globalmente.
Si queremos ver que los cambios se realizaron correctamente usamos:
❯ git config user.name
Firtsmiracle
De la misma manera si queremos configurar la información del correo
, usamos el comando:
❯ git config --global user.email "firtsmiracle@hotmail.com"
volvemos a revisar si los cambios se guardaron exitosamente con el comando:
❯ git config user.email
firtsmiracle@hotmail.com
Creación de Repositorio #
Una vez tengamos configurado nuestro nombre de usuario
y el correo
, finalmente podemos continuar con lo mas fundamental de Git
, que es la creación de un repositorio.
Primeramente debemos estar dentro de nuestra carpeta o directorio de trabajo en nuestro caso en la carpeta miGit
con pwd
verificamos que estemos en la ruta
❯ pwd
/home/fmiracle/Desktop/Prueba/Git/miGit
Para poder crear el repositorio dentro de esa carpeta debemos ejecutar el siguente comando git init
❯ git init
Inicializado repositorio Git vacío en /home/fmiracle/Desktop/Prueba/Git/miGit/.git/
Este comando nos inicializara un repositorio de Git
dentro de esta carpeta y con ello vamos a poder rastrear las versiones de todos los archivos que esten dentro de esta carpeta.
Esto nos crea una carpeta de nombre .git
que se encuentra oculta como medida de seguridad, si deseamos verla podemos usar el comando ls -la
❯ ls -la
drwxr-xr-x root root 8 B Mon Apr 10 17:38:01 2023 .
drwxr-xr-x root root 10 B Mon Apr 10 17:37:56 2023 ..
drwxr-xr-x root root 98 B Mon Apr 10 17:38:01 2023 .git
Areas de Git #
Existen tres areas en las cuales puede estar un archivo Git
, donde cada una de ellas representara un estado distinto de un archivo.
Directorio de Trabajo - Working Directory #
Es la carpeta del proyecto que justamente va a contener los archivos y el directorio oculto .git
Area de Preparación - Staging Area #
Viene a ser una area intermedia entre el directorio del trabajo
y el Repositorio
, aqui se encuentran los archivos y cambios que seran incluidos en el proximo commit
Cabe mencionar que esta area no es definitiva para agregarla al repositorio, ya que podemos evaluar y retractar los cambios que realizamos para que no se incluyan en el proximo commit
Cuando ya tenemos todos los cambios listo en el area de preparación, ahora si podemos crear un commit
que sera el definitivo donde se encontraran los cambios que se agregaran al repositorio
Repositorio .git #
Aqui se contienen todos los metadatos y versiones de todo nuestro proyecto, es la parte del repositorio que se copia al clonar un repositorio externo en nuestra pc, concretamente cuando hacemos git clone https://github.com/nombre_repo
Es la parte mas importante de Git
Estados de Git #
Los archivos al estar en cada una de las areas mencionadas, repre/senta un estado distinto que podemos ver a continuación:
Modificada - Modified #
La versión del archivo esta modificada
, si la versión contiene cambios que no son parte del repositorio y no se han añadido al area de preparación
Preparada - Staged #
La versión es preparada
, cuando contiene cambios que no son parte del repositorio, pero si fue añadida al area de preparación
Confirmada - Commited #
La versión es confirmada
, si ya se encuentra en el directorio .git
Estado del Repositorio #
Para poder verificar el estado de nuestro repositorio podemos hacer uso del comando git status
❯ git status
En la rama main
No hay commits todavía
no hay nada para confirmar (crea/copia archivos y usa "git add" para hacerles seguimiento)
Despues de ejecutar el comando nos muestra que estamos en la rama main
, que aun no hemos realizado un commit
y ademas vemos que tampoco hay nada pendiente para realizar un commit
Cabe mencionar que segun la instalación nuestra rama principal puede ser
main
omaster
y si deseamos cambiarla debemos ejecutar el comandogit config --global init.defaultBranch main
para establecermain
como la rama principal por defecton, aunque de seguir con la que tenemos por defecto podemos trabajar sin problemas igualmente, pero hay que tenerlo en cuenta
Ahora que ocurre si yo creo un archivo lo llamaremos archivo_git.txt
y le introduciremos un contenido.
❯ /bin/cat archivo_git.txt
Este es mi primer repositorio
Si volvemos a ejecutar el comando git status
, esta vez nos dice que tenemos archivos que no estamos haciendo seguimiento, concretamente el archivo que creamos archivo_git.txt
❯ git status
En la rama main
No hay commits todavía
Archivos sin seguimiento:
(usa "git add <archivo>..." para incluirlo a lo que se será confirmado)
archivo_git.txt
no hay nada agregado al commit pero hay archivos sin seguimiento presentes (usa "git add" para hacerles seguimiento)
Si queremos comenzar a hacer seguimiento del arhivo, debemos ejecutar el comando git add
y seguido el nombre del archivo
❯ git add archivo_git.txt
A simple vista parece no haberse ejecutado ningun cambio pero si volvemos a verificar el estado con git status
, ahora si tenemos cambios que van a ser agregados al proximo commit
❯ git status
En la rama main
No hay commits todavía
Cambios a ser confirmados:
(usa "git rm --cached <archivo>..." para sacar del área de stage)
nuevos archivos: archivo_git.txt
Cuando vemos que el archivo ya es parte de los cambios que se agregaran a el proximo commit
, quiere decir que ya es parte del area de preparación
, pero recordemos que en esta area aun podemos retractarnos y decir a Git
que no queremos agregarlos al proximo commit
, y esto lo hacemos como nos indica Git
con el comando git rm --cached
y seguidamente el nombre del archivo.
❯ git rm --cached archivo_git.txt
rm 'archivo_git.txt'
Volvemos a verificar el estado y vemos que el archivo nuevamente no esta en seguimiento.
❯ git status
En la rama main
No hay commits todavía
Archivos sin seguimiento:
(usa "git add <archivo>..." para incluirlo a lo que se será confirmado)
archivo_git.txt
no hay nada agregado al commit pero hay archivos sin seguimiento presentes (usa "git add" para hacerles seguimiento)
Saber esto es importante ya que en el area de preparación
los cambios no son definitivos, ya que podemos equivocarnos y por error incluir un archivo al area de preparación
podemos verificar que cambios seran agregados y si queremos removerlos del area de preparación
Ahora si queremos volver a colocar el archivo en el area de preparación
, usamos nuevamente el comando git add
y nuevamente vemos que hay cambios que seran agregados al proximo commit
❯ git add archivo_git.txt
❯ git status
En la rama main
No hay commits todavía
Cambios a ser confirmados:
(usa "git rm --cached <archivo>..." para sacar del área de stage)
nuevos archivos: archivo_git.txt
Lo que faltaria ahora sera pasar el archivo del area de preparación
al repositorio como tal .git
para ello veamos a continuaciòn como creamos un commit
Renombrar Archivos del Repositorio #
Como vimos por cada acción que hagamos al archivo, al usar git status
nos saldra el mensaje de que hay archivos sin seguimiento y demos usar git add
para agregarlos. Concretamente en este caso si queremos renombar un archivo usamos el comando mv
.
Renombraremos el archivo que creamos archivo.txt
.
❯ ls
archivo.txt archivo_git.txt
❯ mv archivo.txt archivo_renombrado.txt
Seguidamente debemos agregar el archivo con git add
a el area de preperación
, despues de ejecutar git status
❯ git status
En la rama main
Archivos sin seguimiento:
(usa "git add <archivo>..." para incluirlo a lo que se será confirmado)
archivo_renombrado.txt
no hay nada agregado al commit pero hay archivos sin seguimiento presentes (usa "git add" para hacerles seguimiento)
❯ git add archivo_renombrado.txt
El problema es que es mas tedioso y repetitivo estar ejecutando cada comando, por ello Git
nos da la opción de acortar todos estos pasos realizados solo usando un comando git mv
y seguido renombrar el archivo, practicamente lo mismo que ejecutamos al renombrarlo con mv
solo que ahora debemos anteponer la palabra git
En este caso renombraremos el archivo archivo_renombrado.txt
❯ git mv archivo_renombrado.txt archivo_modificado.txt
❯ git status
En la rama main
Cambios a ser confirmados:
(usa "git restore --staged <archivo>..." para sacar del área de stage)
nuevos archivos: archivo_modificado.txt
Vemos que usando el comando git mv
ya nos es necesario usar git add
ya que el archivo se agrega automaticamente al area de preparación
, lo que nos optimiza el proceso.
Eliminar archivos del Repositorio #
De la misma forma que renombramos el archivo, podemos hacer lo mismo para eliminarlo. anteponiendo la palabra git
y seguido el comando rm
.
Para este caso vamos a eliminar el archivo que renombramos antes archivo_modificado.txt
, para ello como ya se encontraba en el area de preparación
debemos retirarla haciendo uso de los comandos:
❯ git restore --staged archivo_modificado.txt
git restore archivo_modificado.txt
Una vez el arbol de trabajo este limpio, ejecutamos el comando git rm
y seguido el archivo que queremos eliminar. Visualizamos los cambios y vemos que nos agilizo el proceso ya que el archivo se encuentra en el area de preparación
y no fue necesario agregarlo ejecutando el git add
❯ git rm archivo_modificado.txt
rm 'archivo_modificado.txt'
❯ git status
En la rama main
Cambios a ser confirmados:
(usa "git restore --staged <archivo>..." para sacar del área de stage)
borrados: archivo_modificado.txt
Gitignore - Ignorar archivos y directorios #
Si queremos ignorar archivos, que nunca se incluyan en nuestro repositorio y que solo sean especificos para nuestra máquina como son las variables de entorno.
Supongamos que estamos trabajando con una base de datos
que tenemos instalada localmente, en este caso queremos que este archivo no se suba al repositorio, ya que no queremos que otras personas conozcan estos datos.
Para ello vamos a crearnos un archivo al que llamaremos .env
que tendra de contenido unas supuestas credenciales.
❯ /bin/cat .env
user=firtsmiracle
password=12345
Ahora ejecuto git status
y nos aparece este archivo .env
❯ git status
En la rama main
Archivos sin seguimiento:
(usa "git add <archivo>..." para incluirlo a lo que se será confirmado)
.env
no hay nada agregado al commit pero hay archivos sin seguimiento presentes (usa "git add" para hacerles seguimiento)
Pero yo no quiero que por error este archivo se agregue a incluir en un commit
, para ello debemos crear un archivo de nombre .gitignore
y en este archivo especificare cuales son los archivos o rutas de carpetas que quiero ignorar para que no vallan a nuestro repositorio.
En este caso agregare dentro del archivo .gitignore
a nuestro archivo que contenia las credenciales .env
❯ /bin/cat .gitignore
.env
Y si ahora vuelvo a ejecutar el comando git status
el archivo .env
ya no aparece, solo aparece el archivo .gitignore
❯ git status
En la rama main
Archivos sin seguimiento:
(usa "git add <archivo>..." para incluirlo a lo que se será confirmado)
.gitignore
no hay nada agregado al commit pero hay archivos sin seguimiento presentes (usa "git add" para hacerles seguimiento)
Entonces agregamos nuestro archivo .gitignore
con git add
y verificamos
❯ git add .gitignore
❯ git status
En la rama main
Cambios a ser confirmados:
(usa "git restore --staged <archivo>..." para sacar del área de stage)
nuevos archivos: .gitignore
De esta manera todo lo que incluyamos dentro del archivo .gitignore
no sera agregado por ningun motivo al repositorio.
Un pequeño tip final es que con el comando
git status -s
, podemos ver el estado en el que se encuentra cada archivo de manera simplificada.
❯ git status -s
A .gitignore
D archivo_modificado.txt
?? archivo_cambiado.txt
Donde A
seria agregado, D
borrado y cuando vemos ??
quiere decir que el archivo aun no tiene un seguimiento.
Creación de un Commit #
Antes de crear nuestro primer commit
, debemos recordar que un commit
viene a ser un registro o foto del estado de nuestro proyecto en un momento especifico. Registra los cambios realizados en los archivos en comparación con la versión anterior.
Cada vez que creeemos un commit
debemos agregarle una descripción segun la acción o los cambios que hayamos realizado esto es muy importante para saber con detalle a traves del tiempo las modificaciones que se realizaron en el proyecto.
Ahora comenzemos a crear nuestro commit
Anteriormente cuando ejecutamos git status
, veiamos que habian cambios que estan listos para ser agregados del area de preparación
a al repositorio .git
.
❯ git status
En la rama main
No hay commits todavía
Cambios a ser confirmados:
(usa "git rm --cached <archivo>..." para sacar del área de stage)
nuevos archivos: archivo_git.txt
Lo siguiente seria agregar un commit
, esto lo hacemos con el comando git commit
y seguidamente con -m
agregamos una descripción.
❯ git commit -m "agregar mi archivo de texto"
[main (commit-raíz) 0143452] agregar mi archivo de texto
1 file changed, 1 insertion(+)
create mode 100644 archivo_git.txt
Se nos muestra información del commit
, como su identificador 0143452
, la descripción y hubo una modificación en conjunto con una inserción que significa que se agrego una linea al archivo.
Estructura del Commit #
La estructura de uncommit
se compone de varias partes, esto lo observamos al ejecutar el comando git log
.
❯ git log
commit 0143452c010ede2332f5c1b8bad7815743770a2a (HEAD -> main)
Author: Firtsmiracle <firtsmiracle@hotmail.com>
Date: Mon Apr 10 18:43:50 2023 +0000
agregar mi archivo de texto
Podemos observar inicialmente una serie de numeros alfanumericos que corresponde a un identificador unico llamado SHA
.
SHA: Scure Hash Algorith o Algoritmo de hash seguro
este SHA
identifica:
- Los cambios realizados
- Dónde se realizaron los cambios
- Quién realizo los cambios
Seguidamente el commit
contiene el nombre del usuario
en conjunto con el correo
asignado Author: Firtsmiracle <firtsmiracle@hotmail.com>
; tambien podemos observar la fecha de creación del commit
que corresponde a Date: Mon Apr 10 18:43:50 2023 +0000
Finalmente en la ultima parte podemos ver la descripción que agregamos al crear nuestro commit
-> agregar mi archivo de texto
Historial de Commits #
Si queremos ver el registro de nuestros commits
, podemos usar el comando git log
el cual nos mostrara el historial de todos los commits
que hayamos creado.
❯ git log
commit 0143452c010ede2332f5c1b8bad7815743770a2a (HEAD -> main)
Author: Firtsmiracle <firtsmiracle@hotmail.com>
Date: Mon Apr 10 18:43:50 2023 +0000
agregar mi archivo de texto
Como vimos anteriormente vemos el commit
con su estructura; cabe resaltar que si creamos mas commits
con este comandos los veremos todos.
Creación Alterna de Commits #
Supongamos que editamos el archivo que tenemos archivo_git.txt
y le cambiamos el contenido
El cual cambiaremos de este contenido:
❯ /bin/cat archivo_git.txt
Este es mi primer repositorio
a este nuevo
❯ /bin/cat archivo_git.txt
Este es mi segundo commit
Si ejecutamos git status
vemos que tenemos un archivo en estado modificado
y que hay cambios no rastreados para el proximo commit
❯ git status
En la rama main
Cambios no rastreados para el commit:
(usa "git add <archivo>..." para actualizar lo que será confirmado)
(usa "git restore <archivo>..." para descartar los cambios en el directorio de trabajo)
modificados: archivo_git.txt
sin cambios agregados al commit (usa "git add" y/o "git commit -a")
Para agregar los cambios entonces debemos ejecutar git add
❯ git add archivo_git.txt
❯ git status
En la rama main
Cambios a ser confirmados:
(usa "git restore --staged <archivo>..." para sacar del área de stage)
modificados: archivo_git.txt
Ahora que el archivo esta lista para agregarse al commit
, procerederemos a crearlo
Esta vez ejecutaremos unicamente el comando git commit
sin ningun parametro adiocional, lo que hara que se nos abra el editor de texto donde podremos insertar la descripción ddel commit
Generalmente se nos abrira el editor por defecto en nuestro sistema en nuestro caso por defecto se abrira en vim
o nano
, pero si deseamos podemos configurar el editor apra que inicie con otro con el que trabajemos mas comodo.
Para ello hay varias opciones independientemente si nos encontramos en Linux
o en Windows
Para Linux
:
Si queremos usar Visual Studio Code
ejecutar:
$ git config --global core.editor "code --wait"
Si queremos usar Sublime Text
ejecutar:
$ git config --global core.editor "subl -n -w"
Si queremos usar emacs
ejecutar:
git config --global core.editor emacs
Para Windows
:
Si queremos usar Visual Studio Code
ejecutar:
$ git config --global core.editor "code --wait"
Si queremos usar Sublime Text
ejecutar:
$ git config --global core.editor "'C:/Program Files (x86)/sublime text 3/subl.exe' -w"
Si queremos usar Notepad++
ejecutar:
$ git config --global core.editor "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"
Entonces una vez tengamos configurado nuestro editor procedemos a ejecutar git commit
y se procedera a abrirnos nuestro editor de texto. Tal y como nos indicar podemos agregar un mensaje del commit
en una linea sin comentar y guardamos los cambios, pero si deseamos cancelar la operación simplemente el mensaje tiene que estar vacio.
# Por favor ingresa el mensaje del commit para tus cambios. Las
# líneas que comiencen con '#' serán ignoradas, y un mensaje
# vacío aborta el commit.
#
# En la rama main
# Cambios a ser confirmados:
# modificados: archivo_git.txt
#
Entonces vamos a agregar un mensaje para el commit
Cambiar texto a segundo commit
# Por favor ingresa el mensaje del commit para tus cambios. Las
# líneas que comiencen con '#' serán ignoradas, y un mensaje
# vacío aborta el commit.
#
# En la rama main
# Cambios a ser confirmados:
# modificados: archivo_git.txt
#
y automaticamente al guardar y cerrar el archivo, procede a crearse el commit
❯ git commit
[main bb00766] Cambiar texto a segundo commit
1 file changed, 1 insertion(+), 1 deletion(-)
Ahora podemos volver a ver el historial de commits
usando git log
y esta vez vemos los dos commits
❯ git log
commit bb007665d2356b9531ce10be913fd26a27e757da (HEAD -> main)
Author: Firtsmiracle <firtsmiracle@hotmail.com>
Date: Mon Apr 10 20:13:55 2023 +0000
Cambiar texto a segundo commit
commit 0143452c010ede2332f5c1b8bad7815743770a2a
Author: Firtsmiracle <firtsmiracle@hotmail.com>
Date: Mon Apr 10 18:43:50 2023 +0000
agregar mi archivo de texto
Cambiar Descripción del Commit #
Supongamos que creamos un commit
, pero vimos que pudimos tener un error de tipeo o el mensaje no es muy descriptivo. Pues podemos modificar el ultimo commit
usando el comando git commit --amend
❯ git commit --amend
Al ejecutar se nos vuelve a abrir el editor de texto con la descripción que habiamos ingresado
Cambiar texto a segundo commit
# Por favor ingresa el mensaje del commit para tus cambios. Las
# líneas que comiencen con '#' serán ignoradas, y un mensaje
# vacío aborta el commit.
#
# Fecha: Mon Apr 10 20:13:55 2023 +0000
#
# En la rama main
# Cambios a ser confirmados:
# modificados: archivo_git.txt
#
Para modificarlo solo debemos modificar el mensaje, guardar y cerrar el archivo.
Cambiar el contenido de mi commit
# Por favor ingresa el mensaje del commit para tus cambios. Las
# líneas que comiencen con '#' serán ignoradas, y un mensaje
# vacío aborta el commit.
#
# Fecha: Mon Apr 10 20:13:55 2023 +0000
#
# En la rama main
# Cambios a ser confirmados:
# modificados: archivo_git.txt
#
Regresamos a donde ejecutamos el comando y vemos que se actualizo correctamente.
❯ git commit --amend
[main 222c488] Cambiar el contenido de mi commit
Date: Mon Apr 10 20:13:55 2023 +0000
1 file changed, 1 insertion(+), 1 deletion(-)
Para verificar que se actualizo el commit
en el historial usamos git log
, pero esta vez agregaremos el parametro --oneline
para acortar la información mostrada.
❯ git log --oneline
222c488 (HEAD -> main) Cambiar el contenido de mi commit
0143452 agregar mi archivo de texto
Y vemos que fue modificado con exito.
Es importante saber que si vamos a ejecutar el comando
git commit --amend
lo hagamos en nuestrorepositorio local
no en uno remoto ya que puede ser riesgoso si lo hacemos en proyectos que ya estan siendo usados por otros desarrolladores.
Como consejo hay que tratar siempre de ingresar la descripción o mensaje correcto al commit
para evitar realizar este proceso
Revertir Commits #
Suele pasar en ocasiones cuando estamos trabajando en algun proyecto y al crear un commit
nos damos cuenta de que nos faltaba agregar algo. Si queremos revertir los cambios hechos por un commit
, podemos hacerlo de forma tal que no se afecten los archivos.
Para realizar esto el comando que debemos ejecutar es git reset --soft HEAD~1
, donde con el parametro soft
podemos reiniciarlo de modo que los archivos no se modifiquen en el directorio de trabajo. Solo se va a deshacer el registro del commit
, en este caso con HEAD~1
indicaremos al ultimo commit
que se realizo.
❯ git reset --soft HEAD~1
Una vez ejecutamos el comando, visiblemente no vemos ningun cambio, pero si volvemos a ver el historial de commits
, solo vemos el primer commit
❯ git log
commit 0143452c010ede2332f5c1b8bad7815743770a2a (HEAD -> main)
Author: Firtsmiracle <firtsmiracle@hotmail.com>
Date: Mon Apr 10 18:43:50 2023 +0000
agregar mi archivo de texto
Y si volvemos a leer el archivo, aún mantiene el contenido con los cambios que habiamos realizado
❯ /bin/cat archivo_git.txt
Este es mi segundo commit
Pero que pasa si volvemos a modificar el archivo
❯ /bin/cat archivo_git.txt
Este es mi segundo commit pero modificado
º
y volvemos a ejecutar git status
, vemos cambios listos para ser agregados y otros que aun no estan listos.
❯ git status
En la rama main
Cambios a ser confirmados:
(usa "git restore --staged <archivo>..." para sacar del área de stage)
modificados: archivo_git.txt
Cambios no rastreados para el commit:
(usa "git add <archivo>..." para actualizar lo que será confirmado)
(usa "git restore <archivo>..." para descartar los cambios en el directorio de trabajo)
modificados: archivo_git.txt
Como deshicimos el ultimo commit
lo que quiere decir que el cambio a de ese ultimo commit
que borramos, aún no es parte del repositorio. Para agregar todos esos cambios lo que podemos hacer es ejecutar el comando git add .
Con
git add .
podemos agregar todos los cambios alarea de preparación
, sin necesidad de ejecutar cada archivo.
❯ git add .
❯ git status
En la rama main
Cambios a ser confirmados:
(usa "git restore --staged <archivo>..." para sacar del área de stage)
modificados: archivo_git.txt
Ahora si queremos crear este commit
, volvemos a ejecutar git commit
y asignamos un mensaje mas especifico
Actualizar teto del segundo commit modificado
# Por favor ingresa el mensaje del commit para tus cambios. Las
# líneas que comiencen con '#' serán ignoradas, y un mensaje
# vacío aborta el commit.
#
# En la rama main
# Cambios a ser confirmados:
# modificados: archivo_git.txt
#
Guardamos y cerramos y ya tendriamos creado este nuevo commit
❯ git commit
[main 415796f] Actualizar teto del segundo commit modificado
1 file changed, 1 insertion(+), 1 deletion(-)
Branch - Ramas #
Un branch
es una linea independiente de desarrollo en el repositorio, gracias a estas podemos tener copias del branch
principal y que estas vallan evolucionando o cambiando independientemente sin afectar al branch
principal.
El concepto es similar a las ramas de un arbol, donde tenemos como branch o rama principal main
o master
y desde ahi podemos crear otras subramas que en algun momento si queremos podemos convinar.
Supongamos que tenemos una linea actual del proyecto, pero queremos agregarle nuevas funcionalidades como una nueva sección o cambiar algo para ver su funcionamiento. Pues si creamos un nuevo branch
podemos realizar nuestros cambios sin afectar la versión que actualmente este activo.
Una vez que el branch
alterno a evolucionado con todos los cambios correspondientes, podemos combinarla con el branch
principal.
Creación de un Branch #
Para poder crear un nuevo branch
debemos ejecutar el comando git branch
y seguidamente el nombre de la rama que queremos crear
❯ git branch primer-branch-alterno
y ahora para visualizar los branch
que tenemos usamos unicamente el comando git branch
❯ git branch
* main
primer-branch-alterno
El comandos nos muestra que ahora tenemos dos branch
, el principal que teniamos main
y ahora el nuevo que creamos primer-branch-alterno
Moverse de Branch #
Si queremos desplazarnos de un branch
a otro debemos ejecutar el comando git checkout
y seguido el nombre del branch
❯ git checkout primer-branch-alterno
Cambiado a rama 'primer-branch-alterno'
Para confirmar que nos cambiamos a ese nuevo branch
volvemos a ejecutar git branch
y esta vez nos selecciona el branch
alterno
❯ git branch
main
* primer-branch-alterno
Ahora existe una forma de agilizar este proceso de creación y desplazamiento de un branch
para ello debemos ejecutar git checkout -b
y seguido el nombre de la rama. Pero es importante antes de ejecutar el comando volver a nuestro branch
original main
ya que nos encontramos en el branch
primer-branch-alterno
y nosotros queremos crear el branch
a partir de el branch
principal.
❯ git checkout main
Cambiado a rama 'main'
y ahora si podemos ejecutar el comando y visializamos que efectivamente nos encontramos en el nuevo branch
❯ git checkout -b segundo-branch-alterno
Cambiado a nueva rama 'segundo-branch-alterno'
❯ git branch
main
primer-branch-alterno
* segundo-branch-alterno
Cambiar Nombre al Branch #
Para cambiar el nombre de un branch
existen dos metodos:
En el primero debemos estar en el branch
que deseamos cambiar el nombre, para este caso queremos cambiar el nombre de primer-branch-alterno
a primer-branch
y ejecutar el comando git branch -m
y seguidamente el nuevo nombre a asignar.
❯ git checkout primer-branch-alterno
Cambiado a rama 'primer-branch-alterno'
git branch -m primer-branch
Verificamos los cambios usando git branch
y efectivamente nos modifico el nombre
❯ git branch
main
* primer-branch
segundo-branch-alterno
Si queremos usar el segundo metodo no es necesario estar en el branch
que deseamos cambiar, tan solo hay que ejecutar git branch -m
, seguidamente el nombre del branch
que deseamos cambiar segundo-branch-alterno
y despues el nuevo nombre que se le asignara segundo-branch
❯ git branch -m segundo-branch-alterno segundo-branch
❯ git branch
main
* primer-branch
segundo-branch
Eliminar un Branch #
Una vez que combinamos los cambios que realizamos en los branchs
o si las creamos por error, podemos eliminarlos.
Si deseamos eliminar el branch
, hay que ejecutar el comando git branch -d
y seguidamente el nombre del branch
que queramos borrar.
❯ git branch -d segundo-branch
Eliminada la rama segundo-branch (era 415796f).
❯ git branch
Verificamos si se realizaron los cambios y se borro el branch
con exito.
❯ git branch
main
* primer-branch
Este comando aplica a
branch
en repositorios locales no enbranch
que se encuentren publicadas.
Crear Commits en un Branch #
Veamos como podemos crear un commit
en un branch
que no sea main
que nosotros creemos y veremos como podemos cambiar entre estos branch
para ver como nuestros archivos cambian en nuestros directorios de trabajo.
Esta parte es excelente, paece magia negra xD!
Bueno sabemos que tenemos un archivo de texto en nuestro directorio llamado archivo_git.txt
con un cotenido asignado.
❯ ls
archivo_git.txt
❯ /bin/cat archivo_git.txt
Este es mi segundo commit pero modificado
Ahora nos encontramos en nuestro branch
principal main
❯ git branch
* main
primer-branch
Primero para realizar un cambio nos vamos a mover a nuestro branch
alterno primer-branch
❯ git checkout primer-branch
Cambiado a rama 'primer-branch
Una vez nos en este branch
leemos el archivo que tenemos.
❯ /bin/cat archivo_git.txt
Este es mi segundo commit pero modificado
Podemos ver que el contenido es el mismo, entonces ahora vamos a modificarlo.
❯ /bin/cat archivo_git.txt
Hola Git
Veamos ahora que ocurre si ejecutamos git status
❯ git status
En la rama primer-branch
Cambios no rastreados para el commit:
(usa "git add <archivo>..." para actualizar lo que será confirmado)
(usa "git restore <archivo>..." para descartar los cambios en el directorio de trabajo)
modificados: archivo_git.txt
sin cambios agregados al commit (usa "git add" y/o "git commit -a")
Nos muestra que estamos en el branch
alterno primer-branch
y que tenemos cambios que aún no han sido preparados para el proximo commit
. Entonces para agregsarlo ejecutamos el comando git add .
para agregarlos.
❯ git add .
❯ git status
En la rama primer-branch
Cambios a ser confirmados:
(usa "git restore --staged <archivo>..." para sacar del área de stage)
modificados: archivo_git.txt
Esta vez aun estamos en el branch
alterno primer-branch
, pero si tenemos el archivo en el area de preparación
.
Procedemos a crear nuestro commit
con git commit
y se nos abre nuestro editor de texto, en el cual introduciremos la descripción de este nuevo commit
Cambiar texto a Hola Git
# Por favor ingresa el mensaje del commit para tus cambios. Las
# líneas que comiencen con '#' serán ignoradas, y un mensaje
# vacío aborta el commit.
#
# En la rama primer-branch
# Cambios a ser confirmados:
# modificados: archivo_git.txt
#
Guardamos y cerramos el editor y tendriamos un nuevo commit
❯ git commit
[primer-branch 9771c56] Cambiar texto a Hola Git
1 file changed, 1 insertion(+), 1 deletion(-)
Vamos a leer el archivo otra vez, recordar que estamos en el branch
alterno primer-branch
❯ /bin/cat archivo_git.txt
Hola Git
efectivamente vemos los cambios que realizamos, pero que pasa si ahora vamos a nuestro branch
principal main
❯ git checkout main
Cambiado a rama 'main'
Una vez aqui voy a leer mi archivo archivo_git.txt
❯ /bin/cat archivo_git.txt
Este es mi segundo commit pero modificado
y pumm! wala!! se tenso la cosa, tenemos el contenido antes de realizar el commit
en el branch
alterno. Esto es super genial por que estamos trabajando con el mismo archivo, pero con dos versiones diferentes :).
Historial de Commits en Branchs #
Primeramente vamos a ejecutar el comando git log
con el parametro --oneline
para acortar la información.
❯ git log --oneline
415796f (HEAD -> main) Actualizar teto del segundo commit modificado
0143452 agregar mi archivo de texto
Podemos ver el historial de commits
en main
, pero no vemos el commit
que realizamos en el branch
alterno primer-branch
Vamos a irnos a el branch
alterno con git checkout
❯ git log --oneline
9771c56 (HEAD -> primer-branch) Cambiar texto a Hola Git
415796f (main) Actualizar teto del segundo commit modificado
0143452 agregar mi archivo de texto
Nos damos cuenta que ambos branch
comparten los ultimos dos commits
, pero despues al crearse el branch
alterno el primer commit
que se creo fue el primero. Por eso este branch
muestra este nuevo commit
y el branch
principal main
no, ya que el primer commit
pertener a este nuevo branch
Debo mencionar que existe un comando el cual muestra los
commit
y cual fue la diferencia que introdujo elcommit
❯ git log -p
commit 9771c563effc6eb6a82ed94947c125fdbdd03233 (HEAD -> primer-branch)
Author: Firtsmiracle <firtsmiracle@hotmail.com>
Date: Mon Apr 10 21:46:43 2023 +0000
Cambiar texto a Hola Git
diff --git a/archivo_git.txt b/archivo_git.txt
index cf36484..0152d71 100644
--- a/archivo_git.txt
+++ b/archivo_git.txt
@@ -1 +1 @@
-Este es mi segundo commit pero modificado
+Hola Git
Merge - Fusionar Branchs #
Ya que los branchs
son temporales, debido a que existen miestras estamos desarrollando alguna funcionalidad o corrigiendo un problema, llegara un momento en que debamos fusionar esos cambios con el branch
principal, este proceso se denomina merge
Para fusionar dos
branch
es muy importante estar en elbranch
que recibira la fusión.
Para ello vamos a practicar lo anteriormente aprendido.
Primero voy a dirigirme a el branch
principal main
❯ git checkout main
Cambiado a rama 'main'
❯ git branch
* main
primer-branch
Ahora crearemos un nuevo branch
y nos metemos en el
❯ git checkout -b segundo-branch
Cambiado a nueva rama 'segundo-branch'
❯ git branch
main
primer-branch
* segundo-branch
Vamos a modificar el archivo archivo_git.txt
❯ /bin/cat archivo_git.txt
Hola Git
Ahora estoy aprendiendo Git
Continuamos verificado el estadoy vemos que fue modificado
❯ git status
En la rama segundo-branch
Cambios no rastreados para el commit:
(usa "git add <archivo>..." para actualizar lo que será confirmado)
(usa "git restore <archivo>..." para descartar los cambios en el directorio de trabajo)
modificados: archivo_git.txt
sin cambios agregados al commit (usa "git add" y/o "git commit -a")
Sigue agregarlo al area de preparación
❯ git add .
❯ git status
En la rama segundo-branch
Cambios a ser confirmados:
(usa "git restore --staged <archivo>..." para sacar del área de stage)
modificados: archivo_git.txt
Creamos el commit
con git commit
Agregamos una segunda linea al archivo
# Por favor ingresa el mensaje del commit para tus cambios. Las
# líneas que comiencen con '#' serán ignoradas, y un mensaje
# vacío aborta el commit.
#
# En la rama segundo-branch
# Cambios a ser confirmados:
# modificados: archivo_git.txt
#
Guardamos y cerramos
❯ git commit
[segundo-branch 924f1c5] Agregamos una segunda linea al archivo
1 file changed, 2 insertions(+), 1 deletion(-)
Ahora volveremos a el branch
principal main
y vemos el antiguo contenido.
❯ /bin/cat archivo_git.txt
Este es mi segundo commit pero modificado
Para poder realizar ahora el merge
o la fusión de branch
, despues de ya terminar de hacer todos nuestros cambios. Debemos estar en el branch
que recibira los cambios.
❯ git branch
* main
primer-branch
segundo-branch
Y ahora procedemos a ejecutar el comando git merge
seguido de el nombre de la rama que queremos fusionar, en nuesto caso queremos fusionar el branch
recien creado segundo-branch
❯ git merge segundo-branch
Actualizando 415796f..924f1c5
Fast-forward
archivo_git.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Vemos el mensaje de que se estan combinando todos los commits
con el branch
principal
Y ahora si leemos el archivo archivo_git.txt
, vemos que se combinaron ambos branch
:)
❯ /bin/cat archivo_git.txt
Hola Git
Ahora estoy aprendiendo Git
y si vemos el historial ahora ese commit
que hicimos al modificar el archivo en segundo-branch
, tambien es parte de main
❯ git log --oneline
924f1c5 (HEAD -> main, segundo-branch) Agregamos una segunda linea al archivo
415796f Actualizar teto del segundo commit modificado
0143452 agregar mi archivo de texto
Conflictos en Merge - Conflictos al fusionar Branchs #
Ya que realizamos antes el merge
de ambos branch
, no necesitamos ya el branch
que creamos segundo-branch
❯ git branch
* main
primer-branch
segundo-branch
Asi que podemos borrar este branch
❯ git branch -d segundo-branch
Eliminada la rama segundo-branch (era 924f1c5).
Ahora los conflictos ocurren cuando tratamos de hacer un merge
de archivos que tienen cambios que tienen conflictos.
Estos pueden ser: Modificar el mismo texto, Modificar la misma linea o elemento, esto Git
los considera incompatible.
En estos casos tenemos que decidir como vamos a hacer el merge
Veamoslo a continuación:
Vemos que el contenido del archivo en primer-branch
es
❯ git branch
main
* primer-branch
❯ /bin/cat archivo_git.txt
Hola miGit
y ahora si vamos a main
y leemos el archivo
❯ git checkout main
Cambiado a rama 'main'
❯ /bin/cat archivo_git.txt
Hola Git
Ahora estoy aprendiendo Git
Que pasa si intentamos hacer un merge
de ambos branch
❯ git merge primer-branch
Auto-fusionando archivo_git.txt
CONFLICTO (contenido): Conflicto de fusión en archivo_git.txt
Fusión automática falló; arregle los conflictos y luego realice un commit con el resultado.
Al ejecutar el comando, nos dice que la combinación automatica falló y debemos arreglar los conflictos.
Si vamos a nuestro editor de texto nos mostrara algo de este tipo
<<<<<<< HEAD
Hola Git
Ahora estoy aprendiendo Git
=======
Hola miGit
>>>>>>> primer-branch
En este caso el editor de texto Visual Studio Code
, nos fascilita decidir cuando tenemos este tipo de conflictos. Asi que en estos casos es muy recomendable usarlo.
Nos da las opciones:
Accept Current Change
: Aceptar el cambio actual “del branch main”Accept Incoming Change
: Aceptar el cambio entrante “del branch primer-branch”Accept Both Change
: Aceptar ambos cambiosCompare changes
: Comparar los cambios
Esa decisión ya dependera del cambio que estes dispuesto a aceptar.
En este caso usare la opción de aceptar ambos cambios.
Continuamos guardando y cerrando el editor y ejecutamos git merge --continue
para continuar el proceso de fusión, esto nos abrira el editor nuevamente con el mensaje que se asignara al commit
Merge branch 'primer-branch'
# Conflicts:
# archivo_git.txt
#
# Parece que estás realizando una fusión.
# Si esto no es correcto, ejecuta
# git update-ref -d MERGE_HEAD
# e intenta de nuevo.
# Por favor ingresa el mensaje del commit para tus cambios. Las
# líneas que comiencen con '#' serán ignoradas, y un mensaje
# vacío aborta el commit.
#
# En la rama main
# Todos los conflictos resueltos pero sigues fusionando.
#
# Cambios a ser confirmados:
# modificados: archivo_git.txt
#
Guardamos el archivo y cerramos para culminar el proceso
❯ git merge --continue
[main 95b5d86] Merge branch 'primer-branch'
Pudimos solucionar el conflicto y nos hizo el merge
de manera exitosa, como vimos en este caso visual studio code
es muy útil para solucionar estos conflictos.
Ahora finalmente leeremos el archivo otra vez
❯ /bin/cat archivo_git.txt
Hola Git
Ahora estoy aprendiendo Git
Hola miGit
Y como resultado tenemos el archivo tal y cual lo combinamos.
Conexión con Github #
Despues de haber trabajado todo nuestro codigo, llego la hora de subirlo a la nube. Vamos a hacer esto utilizando GitHub
Para ello lo primero que debemos hacer es crearnos una cuenta, lo cual es un proceso muy sencillo, podemos hacerlo usando dirigiendonos a este enlace:
Una vez creada nuestra cuenta nos vamos a la sección de Repositorios
y le damos a New
Ahora vamos a elegir un nombre para nuestro repositorio en este caso usaremos de nombre mi-primer-repositorio
Lo siguiente sera dar click en Create
Ahora nos dara una serie de opciones de que podemos hacer para subirlo aqui en github
Nosotros usaremos el comando, git remote add origin https://github.com/f1rtsmiracle/mi-primer-repositorio.git
, en donde git remote
nos va a servir para indicar si es que vamos a tener un servidor remoto en el cual subir nuestros cambios y con add origin
le indicamos de donde nosotros tenemos que ir a obtener nuestro codigo y tambien a donde tenemos que subir los cambios realizados y finalmente la url
de donde se encuentra almacenado nuestro codigo.
❯ git remote add origin https://github.com/f1rtsmiracle/mi-primer-repositorio.git
Finalmente usaremos el comando git push
, para subir nuestros cambios los cuales seran con respecto a el branch
con la que estemos trabajando, pero ya que main
no se encuentra creado en github
con -u
creamos el branch
y con origin
indicamos donde queremos que sea creado y finalmente el nombre del branch
❯ git push -u origin main
Despues de ejecutar el comando nos pedira ingresar el nombre de usuario
y el password
Procedemos a ingresar el usuario
:
❯ git push -u origin main
Username for 'https://github.com': f1rtsmiracle
Password for 'https://f1rtsmiracle@github.com':
Sim embargo en password
no debemos ingresar la contraseña con la que nos registramos a github
. Aqui nosotros debemos introducir una key
Para obtenerla nos dirigimos a la opción de nuestro perfil settings
Despues nos vamos a la opción Developer Settings
A continuación vamos a la opción Personal Access Token
-> Tokens (classic)
-> Generate New Token
Ingresamos el nombre del token, establecemos un tiempo de expiración y marcamos la opción repo
Finalmente damos click en la opción Generate Token
Estos nos mostrara nuestro token
creado el cual debemos copiarlo y ingresarlo en Password
y vemos como todo nuestro codigo se subio a github
❯ git push -u origin main
Username for 'https://github.com': f1rtsmiracle
Password for 'https://f1rtsmiracle@github.com':
Enumerando objetos: 21, listo.
Contando objetos: 100% (21/21), listo.
Compresión delta usando hasta 4 hilos
Comprimiendo objetos: 100% (8/8), listo.
Escribiendo objetos: 100% (21/21), 1.73 KiB | 888.00 KiB/s, listo.
Total 21 (delta 1), reusados 0 (delta 0), pack-reusados 0
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/f1rtsmiracle/mi-primer-repositorio.git
* [new branch] main -> main
Rama 'main' configurada para hacer seguimiento a la rama remota 'main' de 'origin'.
Vamos a nuestro repositorio nuevamente y vemos los cambios.
Y cada vez que queramos seguir agregando nuevos cambios, lo vamos modificando con nuestro editor de texto preferido, luego nos vamos a la terminal y los agregamos con git add
. Creamos un commit
y finalmente usamos el comando de git push
y con ese vamos a agregar todos nuestros cambios.
Ahora en caso que estemos creando un nuevo branch
y todavia no queremos hacerle un merge
, pero si queremos subirlo a github
, lo que tenemos que hacer es cambiar de branch
con el comando git checkout nombre_branch
y ejecutamos git push -u nombre_rama
y lo que hara es crear este branch
en el repositorio.
Espero haberte ayudado, esto seria todo hasta la proxima!!! :)
Comments