Codemaker Git y GitHub

Git y GitHub Tema 2

Los comandos básicos

Con cinco comandos se hace casi todo el trabajo de cada día. Esta es la tabla que tienes que tener a mano. Después, cómo conectar tu proyecto con GitHub y trabajar desde dos ordenadores.

Los cinco imprescindibles#

ComandoQué hace
★git pull origin mainTrae de GitHub los cambios que no tienes y los junta con los tuyos
★git add .Prepara todos tus cambios para el próximo commit (el punto significa «todo»)
★git commit -m "mensaje"Guarda lo preparado en el historial, con un mensaje que explica qué has hecho
★git push origin mainSube tus commits a GitHub
★git statusTe dice cómo estás: qué archivos han cambiado y cuáles están preparados

origin es tu repositorio de GitHub y main, la rama principal (las ramas, en el tema avanzado).

El ciclo de cada día#

El ciclo de cada día: git pull, trabajar, git add, git commit y git push

Terminal
git pull origin main                      # 1. antes de empezar
# ... trabajas en tu código ...
git add .                                 # 2. preparar
git commit -m "Añade el menú lateral"     # 3. guardar
git push origin main                      # 4. subir

Importante

La regla de oro: git pull antes de empezar a trabajar y antes de hacer push. Así siempre partes de lo último, y te ahorras casi todos los problemas.

Empezar un proyecto con GitHub#

GitHub guarda una copia de tu repositorio en la nube: una copia de seguridad, y la forma de trabajar un día en el aula y otro en casa con el mismo proyecto. Para conectar un proyecto con GitHub hay dos caminos, según cómo empieces.

Si el proyecto aún no existe: clonar#

  1. En GitHub, pulsa New (o el + de arriba a la derecha → New repository).
  2. Escribe el nombre, elige Public o Private y marca Add a README file.
  3. Pulsa Create repository, y después el botón verde Code: copia la dirección que empieza por https://.
  4. En la terminal, en la carpeta donde quieras el proyecto:
Terminal
git clone https://github.com/ana/mi-proyecto.git

Se crea la carpeta mi-proyecto, ya conectada con GitHub. Ábrela en VS Code y a trabajar: pull, add, commit y push funcionan desde el primer momento.

Si ya tienes el proyecto en tu ordenador: conectarlo#

  1. En GitHub, crea el repositorio como antes, pero sin marcar Add a README file: tiene que estar vacío.
  2. En la terminal, dentro de la carpeta de tu proyecto:
Terminal
git init
git add .
git commit -m "Primer commit"
git remote add origin https://github.com/ana/mi-proyecto.git
git push -u origin main
ComandoQué hace
git initConvierte la carpeta en un repositorio
git remote add origin <url>Le dice a Git dónde está tu repositorio de GitHub, y le pone de nombre origin
git push -u origin mainSube la rama main. La -u la deja enlazada: a partir de ahora basta con git push y git pull

Bajar y subir: pull, push y fetch#

ComandoDirecciónQué hace
git push origin mainTu ordenador → GitHubSube tus commits
git pull origin mainGitHub → tu ordenadorTrae los commits que no tienes y los junta con tu trabajo
git fetch originGitHub → tu ordenadorSolo mira si hay cambios nuevos, sin tocar tus archivos

Trabajar en dos ordenadores#

El caso típico: trabajas en el aula, subes, y en casa sigues donde lo dejaste.

DóndeQué haces
En casa, la primera vezgit clone <url> para tener el proyecto
Al empezar, en cualquier sitiogit pull origin main, para traer lo que hiciste en el otro ordenador
Al terminar, en cualquier sitiogit add ., git commit -m "…" y git push origin main, para dejarlo en GitHub

Si se te olvida el pull del principio y GitHub tiene commits que tú no, el push se rechaza:

Salida
 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to 'https://github.com/ana/mi-proyecto.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.

No se ha perdido nada. La solución es la que dice el propio mensaje: git pull origin main y otra vez git push origin main. Si los dos ordenadores cambiaron las mismas líneas del mismo archivo, el pull avisará de un conflicto: lo tienes en el tema avanzado.

Otros comandos útiles#

ComandoQué hace
git clone <url>Descarga un repositorio de GitHub a tu ordenador (más arriba)
git log --onelineEl historial de commits, uno por línea
git diffLas líneas que has cambiado y aún no has preparado
git restore <archivo>Deshace los cambios de un archivo que aún no has preparado. Cuidado: esos cambios se pierden
git restore --staged <archivo>Saca un archivo de «preparados», sin perder los cambios

Donde pone <url> o <archivo>, se escribe su valor, sin los < >: git restore App.java.

Así se ve en la terminal#

Un proyecto nuevo con un App.java. Primero, git status avisa de que hay un archivo que Git todavía no vigila:

Terminal
git status
Salida
On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	App.java

nothing added to commit but untracked files present (use "git add" to track)

Se prepara y se guarda:

Terminal
git add .
git commit -m "Primer commit"
Salida
[main (root-commit) e8b9f0f] Primer commit
 1 file changed, 1 insertion(+)
 create mode 100644 App.java

e8b9f0f es el código del commit: cada uno tiene el suyo. Y si no queda nada por guardar, git status lo dice así:

Salida
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

Buenos mensajes de commit#

El mensaje es para tu yo del futuro (y para tu equipo): tiene que decir qué cambiaste.

MalBien
cambiosAñade el formulario de nuevo alumno
arregladoCorrige el total cuando la lista está vacía
asdfCambia el color del botón Guardar
todo (un commit al final del día con todo)Un commit por cada cosa terminada

Desde VS Code#

VS Code tiene todo esto en la pestaña Control de código fuente (el icono de las ramitas, a la izquierda, o Ctrl + Shift + G):

ComandoEn VS Code
git statusLa lista de Cambios: cada archivo modificado, con una letra (U nuevo, M modificado, D borrado)
git addEl + al lado de cada archivo, o al lado de «Cambios» para todos
git commit -m "…"Escribir el mensaje en el cuadro de arriba y pulsar Confirmar (Commit)
git pull y git pushEl botón Sincronizar cambios (Sync Changes), que hace los dos

Consejo

Aprende los comandos aunque luego uses los botones: cuando algo falla, el mensaje de error habla de pull, push y commit, y con los comandos sabes qué ha pasado.

Consejo

Si prefieres no usar la terminal, en VS Code también puedes subir una carpeta a GitHub: en Control de código fuente, botón Publicar en GitHub (Publish to GitHub).

Errores frecuentes#

MensajeQué significaCómo se arregla
fatal: not a git repositoryLa terminal no está en la carpeta del proyecto, o la carpeta no es un repositorioAbre en VS Code la carpeta del proyecto, o haz git init si es nuevo
nothing added to commit but untracked files presentHas hecho commit sin add: no había nada preparadoHaz git add . antes del commit
nothing to commit, working tree cleanNo es un error: no has cambiado nada desde el último commitNada: ya está todo guardado
Author identity unknownGit no sabe quién eresConfigura tu nombre y correo: Preparar el ordenador
error: src refspec main does not match anyIntentas subir la rama main, pero tu rama se llama master, o aún no has hecho ningún commitHaz un commit primero. Si la rama es master, cámbiale el nombre con git branch -m main
! [rejected] main -> main (fetch first)GitHub tiene commits que tú no tienesgit pull origin main y luego git push origin main
error: remote origin already exists.El repositorio ya estaba conectado con GitHubNo hace falta volver a hacer remote add. Para ver a dónde apunta: git remote -v
Repository not foundLa dirección está mal escrita, o el repositorio es privado y tu cuenta no tiene accesoCopia otra vez la dirección del botón Code de GitHub
fatal: Need to specify how to reconcile divergent branchesGit no sabe cómo juntar tus cambios con los de GitHubEjecuta una vez git config --global pull.rebase false y repite el pull