1. Árbol de trabajo
La carpeta tal como la ves en el explorador de archivos. Aquí editas, borras y creas.
Git ve estos cambios y te los cuenta, pero no los guarda en ningún historial.
Vamos a trabajar sobre algo real, no sobre un ejemplo de laboratorio. Escoge una carpeta tuya: las plantillas de cotización, unos scripts, la documentación de un procedimiento. Cualquier cosa que ya tenga archivos de texto.
Convertirla en repositorio es un comando y no toca tus archivos:
Git solo añade una subcarpeta oculta .git donde va a guardar el
historial.
cd ~/plantillas-cotizacion
git initInitialized empty Git repository in /home/ana/plantillas-cotizacion/.git/
La palabra empty del mensaje es correcta y despista: el repositorio está vacío de historial, no de archivos. Tus archivos siguen donde estaban; lo que aún no existe es ni un solo commit.
Aquí está la idea que hay que entender de verdad, porque todo lo demás del curso se apoya en ella. En un repositorio, cada archivo está en uno de tres sitios, y pasar de uno a otro es una decisión tuya.
La carpeta tal como la ves en el explorador de archivos. Aquí editas, borras y creas.
Git ve estos cambios y te los cuenta, pero no los guarda en ningún historial.
Una lista donde tú apartas los cambios que quieres que entren en
el próximo commit. Se llena con git add.
Sirve para armar un commit limpio: tocaste seis archivos, pero solo tres pertenecen al mismo asunto.
Lo que ya quedó guardado con git commit, para
siempre y con su mensaje.
Es lo único que se puede recuperar, comparar o compartir.
Este es el malentendido número uno de quien empieza:
«hice commit y no guardó mis cambios». Casi siempre significa que faltó
el add. Git no guarda lo que hay en la carpeta: guarda
lo que tú pusiste en el área de preparación.
git status te dice en qué sitio está cada archivo. Se
consulta constantemente, antes y después de cada cosa, y es el hábito que más
errores evita.
git statusOn branch main No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) cotizacion-servicios.md cotizacion-hardware.md notas-internas.txt nothing added to commit but untracked files present (use "git add" to track)
Fíjate en notas-internas.txt. Antes de guardar nada, la
pregunta correcta no es «¿qué añado?» sino «¿qué no debe entrar
nunca?».
Eso se declara en un archivo llamado .gitignore, con un patrón por
línea. Git deja de proponer esos archivos y no los guarda jamás.
# Credenciales y configuracion con datos sensibles
.env
*.key
*.pem
credenciales.txt
# Archivos que genera el sistema o el editor
.DS_Store
Thumbs.db
.vscode/
# Cosas pesadas o que se regeneran solas
node_modules/
*.log
temporales/Este es el único error del curso que no se arregla con un comando. Si un archivo con contraseñas entra al historial, borrarlo después no lo quita: sigue estando en todos los commits anteriores, y si alguien ya clonó el repositorio, en su copia también.
La contraseña queda quemada y hay que cambiarla, no esconderla. Por eso el
.gitignore se escribe antes del primer commit y no
cuando ya hace falta.
Con el .gitignore puesto, se prepara lo que va a entrar y se
confirma con un mensaje.
git add cotizacion-servicios.md cotizacion-hardware.md
También existe git add ., que prepara todo lo pendiente.
Es cómodo y por eso es peligroso: úsalo solo después de mirar
git status, o acabarás guardando algo que no querías.
git status otra vez. Los archivos preparados
aparecen bajo Changes to be committed. Lo que siga fuera de esa
lista no va a entrar.
git commit -m "Plantillas de cotizacion de servicios y hardware"
La opción -m es el mensaje. Sin ella, Git abre un editor de
texto para que lo escribas allí, que es donde se atasca mucha gente la
primera vez.
git log --oneline tiene que mostrar tu commit con su
identificador. Si aparece, ya está en el historial y se puede
recuperar.
git add cotizacion-servicios.md cotizacion-hardware.md
git commit -m "Plantillas de cotizacion de servicios y hardware"
git log --oneline[main (root-commit) 8f2a1c9] Plantillas de cotizacion de servicios y hardware 2 files changed, 84 insertions(+) 8f2a1c9 Plantillas de cotizacion de servicios y hardware
Ese 8f2a1c9 es el identificador del commit. Git lo calcula
solo y es único: con él puedes referirte a esa fotografía exacta del proyecto en
cualquier momento, incluso dentro de tres años.
No hace falta deshacer nada: haz el add del archivo
que faltaba y un commit nuevo. Un historial con dos commits pequeños es
perfectamente normal.
Si prefieres que quede uno solo, existe
git commit --amend, que rehace el último. Úsalo solo mientras
no lo hayas compartido: en la lección 5 se explica por qué.
git restore --staged archivo.txt lo saca de la lista
sin tocar su contenido. El propio git status te sugiere ese
comando cuando toca.
El .gitignore solo afecta a lo que Git todavía
no sigue. Si el archivo ya entró en un commit, hay que decírselo:
git rm --cached archivo.txt y confirmar.
Eso lo saca de los commits futuros, pero sigue en los anteriores. Si eran credenciales, hay que cambiarlas igual.
git status -s da la versión corta, de una línea por
archivo. Son dos columnas: la de la izquierda es el área de
preparación y la de la derecha el árbol de trabajo. Así,
M es «modificado y preparado» y M es
«modificado y sin preparar».
Arrastra cada comando a lo que hace, o toca uno y luego su espacio.
.git.Editas tres archivos, haces git add de uno solo y luego git commit. ¿Qué quedó en el historial?
Un archivo con la contraseña de la base de datos entró en un commit de la semana pasada. Lo borras y haces commit. ¿Está resuelto?
¿Para qué sirve el área de preparación?
Ya tienes historial. En la siguiente lección lo vas a leer: ver qué cambió, cuándo y por qué, comparar dos versiones línea por línea, y escribir mensajes que le sirvan a quien los lea dentro de un año -que casi siempre eres tú.
Siguiente: Leer el historial
Continuar ← Por qué existe Git