3 Git para novatos
Cuando trabajamos en un proyecto, me imagino que te ha pasado algo así:

Imagínate que además de tener que lidiar con otros compañeros de trabajo editando el mismo archivo.
Para esto existen los sistemas de control de versiones comienzan con una versión base del documento y luego registran los cambios que realiza en cada paso del camino. Puede considerarlo como una grabación de su progreso: puede rebobinar para comenzar en el documento base y reproducir cada cambio que realizó, hasta llegar eventualmente a su versión más reciente.
Una vez que piense en los cambios como algo separado del documento en sí, podrá pensar en “reproducir” diferentes conjuntos de cambios en el documento base, lo que en última instancia dará como resultado diferentes versiones de ese documento. Por ejemplo, dos usuarios pueden realizar conjuntos de cambios independientes en el mismo documento.
A menos que varios usuarios realicen cambios en la misma sección del documento (un conflicto), puede incorporar dos conjuntos de cambios en el mismo documento base.
Un sistema de control de versiones es una herramienta que realiza un seguimiento de estos cambios por nosotros, creando efectivamente diferentes versiones de nuestros archivos. Nos permite decidir qué cambios se realizarán en la siguiente versión (cada registro de estos cambios se denomina (commit) y mantiene metadatos útiles sobre ellos. El historial completo de confirmaciones para un proyecto en particular y sus metadatos conforman un repositorio. Los repositorios se pueden mantener sincronizados en diferentes computadoras, lo que facilita la colaboración entre diferentes personas.
3.1 Configuración
Para configurar Git, necesitamos establecer nuestro nombre y dirección de correo electrónico. Estos detalles se utilizarán para identificar los cambios que realicemos en el repositorio.
git config --global user.name "Nombre Apellido"
git config --global user.email "nombre.apellido@ucr.ac.cr"Todos los cambios subidos a Github, Gitlab, Bitbucket, etc. aparecerán con estos datos.
Una configuración importante es el fin de linea ya que este nos dará las líneas correctas para comparar. La explicación detallada de este problema se encuentra en la documentación de git.
En macOS y Linux:
git config --global core.autocrlf inputY en Windows:
git config --global core.autocrlf truePara configurar el editor de texto por defecto, se puede utilizar el siguiente comando:
| Editor | Comando |
|---|---|
| Vim | $ git config --global core.editor "vim" |
| Emacs | $ git config --global core.editor "emacs -nw" |
Una configuración más es el nombre de la rama principal, en este caso, se recomienda cambiar el nombre de la rama principal de master a main.
git config --global init.defaultBranch mainCon estos comandos puedes editar y listar las configuraciones que acabas de hacer
git config --global --editgit config --listFinalmente para pedir ayuda sobre un comando en particular, se puede utilizar el siguiente comando:
git help
git config -h
git config --help
git help config3.2 Inicializar un repositorio
git initgit statusgit init dentro de repositorios?
Borrados de archivos
rm archivorm -rf .git3.3 Haciendo cambios
$ vim bitacora.qmd
# Agregue cualquier texto
# Presione :wq
$ cat bitacora.qmdgit statusgit add bitacoras.qmdAhora usaremos los commits convencionales para ir guardando los cambios.
git commit -m "feat: mi primer commit"git logVuelvan a editar el archivo bitacoras.qmd y ejecuten los siguientes commandos en ese orden. que observa?
git diff git commit -m "feat: mi segundo commit"La forma correcta es hacer esto:
git add bitacoras.qmdgit diffgit diff --stagedPara ir siguiendo los cambios
git loggit log -1 # Con -N para ver los últimos N cambiosgit log --onelinegit log --oneline --graphgit diff HEAD bitacoras.qmdgit diff HEAD~1 bitacoras.qmdgit show HEAD~1 bitacoras.qmdGit no registra directorios por si solos. Tienen que haber archivos dentro de estos.
mkdir folder_auxiliar
git status
git add folder_auxiliar
git statustouch folder_auxiliar/1.txt folder_auxiliar/2.txt
git status
git add folder_auxiliar
git statusgit commit -m "feat: nuevos archivos auxiliares"3.4 Deshaciendo cambios
Existen tres comandos para deshacer cambios,
restoremanipula el espacio de trabajo o el área de staging restaurando archivos a estados predefinidos (normalmente una versión anterior).resetactualiza la rama de trabajo, moviendo elHEADpara agregar o eliminar commits de esta. Comoresetactualiza el historial de commits, ¡tenga cuidado al manipular commits ya publicadas!revertno actualiza su historial.revertcrea un nuevo commit que revierte los cambios realizados por otro commit. Es esencialmente una reversión de los cambios anteriores, que hace avanzar su historia.refloges un historial de los cambios que se han realizado en el repositorio. Puede ser usado para revertir cambios antiguos.
git restore 
# Agrega una línea al final de bitacoras.qmd
git restore # qué pasó?
# Vuelva a agregar la línea
git add bitacoras.qmd
git status
git restore --staged
# qué paso?
git restore -s <id commit> bitacoras.qmdgit revert 
# Agregue la línea "EsTe tExTo eStA mAl HeScRito" en bitacoras.qmd
git add bitaoras.qmd
git commit -m "feat: nuevo texto bien escrito"
git log
# Oops. Ahora como arreglamos esto?
git revert HEADgit reset
:::{.callout-tip}
touch a.txt b.txt
git add a.txt b.txt
git commit -m "feat: a.txt b.txt"
git reset --soft:::
git commit -m "feat: a.txt b.txt"
git reset --hardUn artículo muy completo al respecto este el siguiente.
git reflog
git reflog3.5 Creando repositorios remotos
Creen un repositorio remoto enGitHub con el nombre “practica-git-fulano” (cambien fulano por tu nombre real).
Y sigan las instrucciones para crear un README.md
Con esto vamos a hacer lo siguiente
- Modifique localmente el README.md de su repositorio de modo que contenga
- Su nombre.
- Su actividad favorita fuera de clases.
git add README.md
git commit -m "feat: agrega información al README.md"
git pushVaya a su repositorio remoto, y busque su README.md
Agregue al README.md
- Cómo harán este semestre para sacar una buena nota?
Verifiquen que el README.md de su computadora no ha cambiado. Ahora ejecuten
git pullQué paso?
3.6 Ramas
Una rama dentro degit es una referencia a commit particular.
Vamos a crear una rama llamada “rama-detalles”
Forma #1
git branch rama-detalles
git checkout rama-detallesForma #2
git switch -c rama-detallesForma #3
git checkout -b rama-detallesPara verificar donde estamos podemos usar estos commandos
git statusgit branch -agit log --oneline -graphEn rama-detalles agregue más información a su README.md. Lo que quiera
git add README.md
git commit -m "feat: agrega detalles a README.md"git switch mainQué pasó acá?
3.7 Merge y Rebase
Hay dos opciones para unir commits de diferentes ramas.
git merge
Podemos ejecutar las siguientes instrucciones
git switch main
git merge rama-detalles
git log --oneline --graph git rebase
Vuelva a generar más commits en la rama main y rama-detalles.
Ahora haga los siguientes:
Apunte el id de los commits generados: por ejemplo main es 123abc y en rama-detalles es 456dfg
Ahora ejecute el siguiente commando
git switch main
git rebase rama-detalles
git log --oneline --graph3.8 Clonar repositorios
La magia degit es poder modificar archivos de forma local y que otros vean su trabajo.
Fuera de cualquier directorio de trabajo, ejecute
git clone https://github.com/maikol-solis/Carrera-Git-CA-204-II-2024.gito
git clone git@github.com:maikol-solis/Carrera-Git-CA-204-II-2024.gitDe ahí en adelante seguiremos las instrucciones en https://github.com/maikol-solis/Carrera-Git-CA-204-II-2024
3.9 Resumen
