Índice de la guía
Push y pull en la terminal de VS Code, paso a paso
Antes de subir o bajar código siempre vas a revisar tres cosas: con qué cuenta estás conectado, en qué rama estás y qué commits tienes. Esta guía te lleva por cada escenario de principio a fin, y cada comando trae su comentario explicando qué hace.
¿Qué necesitas hacer hoy?
git push
Bajar cambiosTraer lo que subió tu equipo o tú desde otra compu. git pull
Cambiar de cuentaPasar de la cuenta A a la cuenta B sin errores 403.
Cambiar de ramaSaber dónde estás y moverte a otra. git switch
Ver mis commitsQué subí, qué falta subir y qué falta bajar.
Me salió un errorLos mensajes más comunes y cómo resolverlos.
Las líneas grises que empiezan con # son comentarios: explican el comando de abajo y la terminal las ignora. Las líneas marcadas con › son los comandos que escribes. El botón Copiar copia solo los comandos. Escribe uno por uno y lee la respuesta antes de seguir. Cuando veas algo en MAYÚSCULAS, como TU_USUARIO, cámbialo por tu dato real.
git add para el próximo commit..git.Abrir la terminal correcta en VS Code
Todo se hace en la terminal integrada de VS Code, parada en la carpeta de tu proyecto. Si la terminal está en otra carpeta, Git no encuentra tu repositorio.
Abre la carpeta del proyecto
- En VS Code: Archivo → Abrir carpeta… (Ctrl+K Ctrl+O).
- Elige la carpeta raíz, la que tiene (o va a tener) la carpeta oculta
.git. - Si VS Code pregunta "¿Confías en los autores?", elige Sí, confío en tus propios proyectos.
Abre la terminal integrada
- Menú Terminal → Nuevo terminal, o el atajo Ctrl+ñ (teclado en español) / Ctrl+` (teclado en inglés).
- En Windows se abre PowerShell por defecto. Todos los comandos
gitde esta guía funcionan igual en PowerShell y en Git Bash. - Para usar Git Bash: en el panel de la terminal da clic en la flechita ∨ junto al + y elige Git Bash.
Comprueba dónde estás y que Git funcione
# Muestra la carpeta donde está parada la terminal; debe ser la de tu proyecto pwd # Muestra la versión de Git instalada; si dice "no se reconoce", Git no está instalado git --version # Muestra quién guarda tus contraseñas/tokens; en Windows debe responder "manager" git config --get credential.helper # Revisa si esta carpeta ya es un repositorio y en qué rama está git status
git version 2.53.0.windows.2 manager On branch main Your branch is up to date with 'origin/main'. nothing to commit, working tree clean
La terminal no está en la carpeta del repo. Muévete con cd "C:\ruta\de\tu\proyecto" (las comillas son necesarias si la ruta tiene espacios) o, si es un proyecto nuevo, ve al paso 08.
¿Qué cuenta está conectada?
Esto es lo que más confunde: Git maneja dos identidades distintas y las dos tienen que coincidir con la cuenta que quieres usar.
user.name y user.email
Es el nombre y correo que se escriben dentro de cada commit. No da permiso de nada; cualquiera puede poner cualquier nombre. GitHub usa el correo para ligar el commit a tu perfil.
La credencial guardada
Es el token que Git Credential Manager guardó cuando iniciaste sesión en el navegador. Esta decide si GitHub te deja hacer push. Si es de otra cuenta, sale error 403.
Revisa la firma de tus commits (identidad 1)
# Muestra el nombre global con el que se firman tus commits en toda la compu git config --global user.name # Muestra el correo global con el que se firman tus commits git config --global user.email # Muestra el nombre que aplica en ESTE repositorio (un valor local le gana al global) git config user.name # Muestra el correo que aplica en ESTE repositorio git config user.email # Lista toda la configuración y de qué archivo sale cada valor (útil si algo no cuadra) git config --list --show-origin
Bernardo Prado bernardo@ejemplo.com
Si sale vacío o con datos de otra persona, corrígelo en el paso 02.
Revisa qué cuenta de GitHub tiene permiso (identidad 2)
# Lista las cuentas de GitHub que Git Credential Manager tiene guardadas en esta compu git credential-manager github list
bernardoprado
Si no aparece nada, no hay sesión guardada: el próximo push te abrirá el navegador para iniciar sesión. Si aparecen dos cuentas, Git puede usar la que no quieres; lee el paso 09.
Otra forma de verlo, desde el Administrador de credenciales de Windows:
# Lista las credenciales de Windows y filtra solo las que mencionan github cmdkey /list | Select-String github
Revisa la cuenta con la que VS Code inició sesión
- Abajo a la izquierda en VS Code está el ícono de persona (Cuentas). Dale clic: verás algo como "tu-usuario (GitHub)".
- Esa sesión la usan los botones de Control de código fuente (el ícono de ramitas). Si en algún momento VS Code muestra una ventana "La extensión GitHub quiere iniciar sesión", es VS Code pidiendo permiso, no la terminal.
- Para evitar líos, que las tres coincidan: firma, credencial de Git y cuenta de VS Code.
Haz la prueba real: ¿tengo acceso a este repositorio?
# Muestra a qué repositorio de GitHub apunta tu proyecto (fetch = bajar, push = subir) git remote -v # Pide a GitHub la lista de ramas del repo sin descargar nada; si responde con códigos, tu credencial SÍ tiene acceso git ls-remote origin
origin https://github.com/bernardoprado/mi-proyecto.git (fetch) origin https://github.com/bernardoprado/mi-proyecto.git (push) 8f3c2a1e4b... HEAD 8f3c2a1e4b... refs/heads/main
En la URL, lo que va después de github.com/ es el dueño del repo. Si el dueño es otra persona, tu cuenta debe estar agregada como colaboradora en ese repo (GitHub → Settings → Collaborators) o el push será rechazado.
Opcional: si instalaste GitHub CLI (gh), también puedes revisar con él:
# Muestra con qué cuenta inició sesión GitHub CLI y qué permisos tiene el token gh auth status
Verificar usuario y contraseña, y reconectarte
Desde agosto de 2021 GitHub ya no acepta la contraseña de tu cuenta para push y pull desde la terminal. Te conectas de una de dos formas: iniciando sesión en el navegador (lo normal en Windows, lo hace Git Credential Manager) o con un token personal que pegas en lugar de la contraseña.
Corrige tu nombre y correo
# Cambia el nombre que aparecerá en tus commits (respeta las comillas) git config --global user.name "Tu Nombre Completo" # Cambia el correo de tus commits; debe estar registrado en tu cuenta de GitHub git config --global user.email "tucorreo@ejemplo.com" # Comprueba que se guardaron los dos valores git config --global --list
En GitHub → Settings → Emails encuentras un correo del tipo 12345678+tuusuario@users.noreply.github.com. Úsalo en user.email y tus commits seguirán ligados a tu perfil.
Borra la credencial guardada (desconectar)
Hazlo cuando el push dice Permission denied, cuando quieres usar otra cuenta, o cuando cambiaste tu token.
# Primero mira qué cuentas están guardadas para saber cuál borrar git credential-manager github list # Cierra la sesión de esa cuenta y borra su token de esta compu git credential-manager github logout TU_USUARIO # Vuelve a listar; la cuenta ya no debe aparecer git credential-manager github list
Si eso no funciona en tu versión, bórrala directo de Windows:
# Borra la credencial genérica de GitHub del Administrador de credenciales de Windows cmdkey /delete:git:https://github.com
O con el mouse: Inicio → "Administrador de credenciales" → Credenciales de Windows → busca git:https://github.com → Quitar.
Vuelve a iniciar sesión
# Abre la ventana de inicio de sesión de GitHub para guardar una cuenta nueva git credential-manager github login # Confirma que quedó guardada la cuenta correcta git credential-manager github list # Prueba el acceso real al repositorio de tu proyecto git ls-remote origin
- Aparece una ventana "Connect to GitHub". Elige Sign in with your browser.
- En el navegador revisa arriba a la derecha que sea la cuenta correcta. Si no, cierra sesión ahí primero.
- Da clic en Authorize git-ecosystem y regresa a VS Code.
Si borraste la credencial y haces directamente git push o git pull, la misma ventana aparece en automático.
Si la terminal te pide "Username" y "Password" en texto
- Username: tu usuario de GitHub (no tu correo).
- Password: un Personal Access Token, no tu contraseña. Mientras lo pegas no se ve nada en pantalla; es normal.
- Para crearlo: GitHub → foto de perfil → Settings → Developer settings → Personal access tokens → Tokens (classic) → Generate new token. Marca el permiso
repo, ponle fecha de vencimiento y cópialo en ese momento, porque no se vuelve a mostrar.
No lo pegues en archivos del proyecto, ni en el chat del grupo, ni en capturas. Si se filtró, bórralo en GitHub y genera otro.
¿A qué repositorio estoy haciendo push o pull?
Hay dos repositorios en juego: la carpeta local en tu compu y el repositorio remoto en GitHub (llamado origin). Antes de subir o bajar, confirma los dos. Si no lo haces, puedes terminar subiendo tu práctica al repo de otra materia o de otro compañero.
La carpeta con .git
Es la carpeta raíz del proyecto. Git trabaja con la carpeta .git más cercana hacia arriba, aunque tu terminal esté en una subcarpeta.
origin
Es un apodo para la URL del repo en GitHub. git push origin main significa "sube mi rama main al repo que se llama origin".
Confirma la carpeta local del repositorio
# Muestra la carpeta donde está parada la terminal pwd # Muestra la carpeta raíz del repositorio de Git que estás usando (la que tiene .git) git rev-parse --show-toplevel
C:/PRADO/UTH 2026-3/APLICAWEB-4TO/mi-proyecto
Por ejemplo C:/Users/TuNombre o C:/PRADO: alguien hizo git init en una carpeta padre por error y Git está tomando todo lo que hay dentro como un solo repo. No hagas push así. Pide ayuda o revisa esa carpeta .git antes de seguir.
Mira a qué repositorio de GitHub apunta
# Lista los remotos con su URL: (fetch) es de donde bajas, (push) es a donde subes git remote -v # Muestra solo la URL de origin, útil para copiarla git config --get remote.origin.url # Muestra el detalle completo: URLs, rama principal y qué rama sube/baja a cuál git remote show origin
* remote origin
Fetch URL: https://github.com/bernardoprado/mi-proyecto.git
Push URL: https://github.com/bernardoprado/mi-proyecto.git
HEAD branch: main
Remote branches:
feature/login tracked
main tracked
Local branch configured for 'git pull':
main merges with remote main
Local ref configured for 'git push':
main pushes to main (up to date)- En la URL
github.com/dueño/repositorio.gitlees de quién es el repo y cómo se llama. - main pushes to main: tu rama main sube a la rama main de GitHub.
- (up to date): no hay nada pendiente. Si dice (fast-forwardable) tienes commits por subir; si dice (local out of date) tienes que hacer pull.
- Si
git remote -vno muestra nada, la carpeta no está conectada a GitHub: ve al paso 08.
Mira a qué rama remota va tu rama actual
# Resumen corto: muestra "rama-local...remoto/rama-remota" en la primera línea
git status -sb
# Muestra solo la rama remota conectada a la tuya (las comillas son obligatorias en PowerShell)
git rev-parse --abbrev-ref --symbolic-full-name "@{u}"
## main...origin/main [ahead 1] M templates/login.html origin/main
Si sale fatal: no upstream configured, tu rama todavía no está conectada con GitHub. La primera vez súbela con git push -u origin NOMBRE_RAMA.
Abre ese repositorio en GitHub para comprobarlo
# Abre en tu navegador la URL de origin (el repo de GitHub de este proyecto) Start-Process (git config --get remote.origin.url)
# Abre en tu navegador la URL de origin desde Git Bash start "$(git config --get remote.origin.url)"
Ya en GitHub revisa: el nombre arriba a la izquierda (dueño / repositorio), que el último commit coincida con git log --oneline -1 y la rama seleccionada en el botón de ramas.
Busca la URL correcta de un repo en GitHub
- Entra a github.com con tu cuenta → foto de perfil → Your repositories. También puedes escribir el nombre en la barra de búsqueda de arriba.
- Si el repo es de otra persona (por ejemplo, del equipo), búscalo en github.com/USUARIO_DEL_DUEÑO?tab=repositories. Si es privado y no te aparece, todavía no te agregan como colaborador.
- Dentro del repo, botón verde <> Code → HTTPS → copia la URL que termina en
.git.
¿Ya hay un remoto activo? Revísalo antes de agregar otro
Una carpeta solo puede tener un remoto llamado origin. Si ya existe y escribes git remote add origin … otra vez, Git lo rechaza:
error: remote origin already exists.
# Lista solo los nombres de los remotos; si aparece "origin", ya está activo git remote # Muestra la URL de cada remoto para saber a qué repo apunta el que ya existe git remote -v
Decide según lo que salga:
- No sale nada: no hay remoto. Usa
git remote add origin URL. - Sale origin con la URL correcta: no hagas nada, ya estás listo.
- Sale origin con otra URL: no lo vuelvas a agregar. Cámbialo con
git remote set-url(siguiente paso).
Si apunta al repositorio equivocado, corrígelo
Opción A, cambiar la URL (la más rápida):
# Cambia la URL del origin que ya existe por la del repositorio correcto git remote set-url origin https://github.com/DUENO/REPO_CORRECTO.git # Comprueba la URL nueva git remote -v
Opción B, borrar y volver a agregar (deja todo limpio, como nuevo):
# Borra el remoto origin viejo; no borra tus archivos ni tus commits git remote remove origin # Confirma que ya no queda ningún remoto (no debe salir nada) git remote -v # Agrega el remoto correcto con el nombre origin git remote add origin https://github.com/DUENO/REPO_CORRECTO.git # Comprueba la URL nueva git remote -v
A veces hay origin (tu copia) y upstream (el repo original del profesor o del equipo). Por eso conviene escribir siempre el remoto y la rama completos: git pull origin main y git push origin main, en lugar de solo git push.
Limpieza total para que el push salga a la primera
Úsala cuando ya probaste varias cosas, te sigue rechazando y no sabes qué quedó configurado. Revisa y limpia, en orden, las tres cosas que pueden fallar: remoto, cuenta y rama.
# 1. REMOTO: mira qué remotos quedaron configurados git remote -v # 1. Borra origin para empezar limpio (si dice "No such remote" es que no había; sigue igual) git remote remove origin # 1. Agrega el remoto correcto una sola vez git remote add origin https://github.com/DUENO/REPO_CORRECTO.git # 1. Confirma que solo hay un origin y con la URL correcta git remote -v # 2. CUENTA: mira qué cuentas de GitHub están guardadas git credential-manager github list # 2. Si aparece una cuenta que no es la tuya o hay de más, bórrala (repite por cada una) git credential-manager github logout CUENTA_QUE_SOBRA # 2. Prueba el acceso; si pide iniciar sesión, entra con la cuenta correcta en el navegador git ls-remote origin # 3. RAMA: confirma que estás en la rama que quieres subir git branch --show-current # 3. Baja lo que ya exista en GitHub para que no te rechace por "fetch first" git pull origin main # 3. Sube y deja la rama conectada con origin/main (-u); las siguientes veces basta "git push" git push -u origin main # Comprueba: debe decir "main pushes to main (up to date)" git remote show origin
El git pull origin main del punto 3 marcará couldn't find remote ref main. Es normal: no hay nada que bajar. Sáltatelo y haz directamente git push -u origin main.
Pasa cuando creaste el repo en GitHub con README y tu carpeta ya tenía commits propios. Para unir las dos historias una sola vez, usa: git pull origin main --allow-unrelated-histories. Después guarda el mensaje de merge y haz git push -u origin main.
No recuerdo dónde está la carpeta del proyecto en mi compu
- En VS Code: Archivo → Abrir reciente muestra las carpetas que abriste antes.
- O busca todas las carpetas que son repositorios de Git dentro de donde guardas tus proyectos:
# Busca carpetas .git dentro de la ruta indicada y muestra la carpeta del proyecto que las contiene
Get-ChildItem "C:\RUTA_DE_TUS_PROYECTOS" -Directory -Recurse -Force -Filter .git -ErrorAction SilentlyContinue | ForEach-Object { $_.Parent.FullName }
Después entra a la que buscas con cd "RUTA_QUE_SALIÓ" y repite git remote -v para confirmar que es la que apunta al repo que quieres.
¿En qué rama estoy y cómo me cambio?
Una rama es una línea de trabajo. main es la principal. Si haces push estando en la rama equivocada, tus cambios llegan a otro lado. VS Code también te muestra la rama actual abajo a la izquierda, junto al ícono de ramita.
Mira tu rama actual y las que existen
# Muestra la rama actual, los archivos modificados y si vas adelante o atrás de GitHub git status # Muestra solo el nombre de la rama en la que estás git branch --show-current # Lista tus ramas locales; la que tiene * es la actual git branch # Actualiza la información de ramas de GitHub y quita las que ya borraron allá git fetch --prune # Lista las ramas locales y las remotas (las remotas empiezan con remotes/origin/) git branch -a # Muestra cada rama con su último commit y a qué rama remota está conectada git branch -vv
feature/login a1b2c3d [origin/feature/login] Agrega vista de login * main 8f3c2a1 [origin/main: ahead 2] Corrige estilos del menú
ahead 2 = tienes 2 commits que falta subir. behind 3 = hay 3 commits en GitHub que falta bajar.
Cámbiate a otra rama
# Cámbiate a una rama que ya existe en tu compu git switch main # Crea una rama nueva a partir de donde estás y cámbiate a ella git switch -c feature/login # Regresa a la rama donde estabas justo antes git switch -
Desde VS Code también puedes dar clic en el nombre de la rama (abajo a la izquierda) y elegir otra de la lista.
Trae una rama que existe en GitHub pero no en tu compu
# Descarga la información de las ramas nuevas de GitHub git fetch origin # Crea la rama local con el mismo nombre y la conecta con origin/feature/login git switch feature/login # Confirma que ya estás en ella y que está conectada con origin git status
Si Git no te deja cambiar porque tienes cambios sin guardar
error: Your local changes to the following files would be overwritten by checkout:
templates/base.html
Please commit your changes or stash them before you switch branches.Tienes dos salidas: hacer commit (si el trabajo ya sirve) o guardarlo en el "cajón" temporal stash:
# Guarda tus cambios sin commit en un cajón temporal y deja la carpeta limpia git stash push -m "cambios a medias del login" # Ahora sí cámbiate de rama git switch main # Cuando termines allá, regresa a tu rama git switch feature/login # Saca los cambios del cajón y los vuelve a poner en tus archivos git stash pop # Si se te olvida qué guardaste, lista lo que hay en el cajón git stash list
Si tu rama principal se llama master y quieres main
# Renombra la rama actual a main (la -M la renombra aunque ya exista otra con ese nombre) git branch -M main # Hace que los repos nuevos que crees empiecen siempre con main git config --global init.defaultBranch main
Ver qué commits hay
Un commit es una "foto" guardada de tu proyecto con un mensaje. Antes de subir o bajar, revisa qué tienes tú y qué tiene GitHub.
Lista tus commits
# Lista los commits en una línea cada uno, el más reciente arriba git log --oneline # Muestra solo los últimos 5 commits git log --oneline -5 # Dibuja el árbol de todas las ramas con sus etiquetas, para ver dónde está cada una git log --oneline --graph --all --decorate # Muestra código, autor, correo, hace cuánto y mensaje; sirve para revisar con qué cuenta firmaste git log --format="%h %an <%ae> %ar %s" -5
8f3c2a1 (HEAD -> main) Corrige estilos del menú 4d9e0b7 Agrega formulario de contacto 71aa5c2 (origin/main) Configura Tailwind
HEAD -> main: es donde estás tú ahora.origin/main: es hasta dónde llega GitHub (según tu último fetch).- Los commits entre los dos (aquí
8f3c2a1y4d9e0b7) son los que todavía no subes. - Si la lista es larga y no regresa el cursor, presiona q para salir.
Compara tu compu contra GitHub
# Actualiza lo que sabes de GitHub sin tocar tus archivos git fetch origin # Commits que tienes en tu compu y que AÚN NO subes git log origin/main..HEAD --oneline # Commits que están en GitHub y que AÚN NO bajas git log HEAD..origin/main --oneline # Muestra los cambios exactos de un commit (copia el código corto de git log) git show 8f3c2a1 # Muestra solo la lista de archivos que tocó ese commit git show --stat 8f3c2a1
Si alguna de las dos listas sale vacía, significa que no hay nada pendiente en esa dirección.
Hacer un git pull de principio a fin
Úsalo al empezar a trabajar, al cambiar de compu o cuando tu equipo subió algo. Regla de oro: haz pull antes de empezar a programar, así evitas conflictos.
Configuración de una sola vez (recomendada)
# Le dice a Git que al hacer pull mezcle con un commit de merge (evita el aviso de "divergent branches") git config --global pull.rebase false # Usa VS Code como editor cuando Git te pida escribir un mensaje (en lugar de Vim) git config --global core.editor "code --wait"
Inicio: confirma cuenta, repositorio y rama
# Muestra con qué cuenta de GitHub te vas a conectar git credential-manager github list # Muestra de qué repositorio de GitHub vas a bajar (línea "fetch") git remote -v # Muestra la rama en la que estás; debe ser la que quieres actualizar git branch --show-current # Revisa que no tengas cambios sin guardar (debe decir "working tree clean") git status
Tienes cambios sin commit. Haz commit primero (pasos 3 a 5 del escenario push) o guárdalos con git stash push -m "pendiente" y después del pull recupéralos con git stash pop.
Revisa qué vas a recibir
# Pregunta a GitHub qué hay de nuevo, sin modificar tus archivos
git fetch origin
# Muestra cuántos commits vas atrás ("behind") o adelante ("ahead")
git status
# Lista los commits que vas a bajar
git log HEAD..origin/main --oneline
On branch main Your branch is behind 'origin/main' by 2 commits, and can be fast-forwarded. (use "git pull" to update your local branch)
Baja los cambios
# Trae los commits de la rama main de GitHub y los mezcla con tu rama actual git pull origin main
Updating 71aa5c2..8f3c2a1 Fast-forward templates/base.html | 12 ++++++------ static/css/app.css | 4 ++++ 2 files changed, 10 insertions(+), 6 deletions(-)
Si sale CONFLICT, no te asustes: ve a conflictos de merge.
Fin: verifica que quedaste al día
# Debe decir "Your branch is up to date with 'origin/main'" git status # Los commits nuevos deben aparecer arriba, con HEAD y origin/main en el mismo renglón git log --oneline -5
On branch main Your branch is up to date with 'origin/main'. nothing to commit, working tree clean
Después de un pull revisa si cambiaron requirements.txt o los modelos: activa tu entorno virtual y corre pip install -r requirements.txt y python manage.py migrate.
Si todavía no tienes el proyecto en tu compu: clónalo
# Descarga el repositorio completo en una carpeta nueva con el nombre del repo git clone https://github.com/TU_USUARIO/TU_REPO.git # Entra a la carpeta que se acaba de crear cd TU_REPO # Abre esa carpeta en VS Code (cierra la ventana anterior si quieres) code .
Hacer un git push de principio a fin
El orden siempre es: revisar → preparar (add) → guardar (commit) → bajar lo nuevo (pull) → subir (push) → verificar.
Inicio: confirma cuenta, firma, rama y repositorio
# Muestra la cuenta de GitHub que tiene permiso de subir git credential-manager github list # Muestra el correo con el que se firmará tu commit git config user.email # Confirma en qué rama vas a subir git branch --show-current # Confirma a qué repositorio vas a subir git remote -v
Revisa qué cambiaste
# Lista los archivos modificados (rojo = cambiado pero sin preparar) git status # Muestra línea por línea lo que cambiaste; presiona q para salir git diff
Changes not staged for commit:
modified: templates/login.html
Untracked files:
static/js/login.jsSi ves venv/, __pycache__/, .env o node_modules/, NO los subas. Agrégalos a un archivo .gitignore en la raíz antes de seguir.
Prepara los cambios (git add)
# Prepara TODOS los archivos cambiados y nuevos de la carpeta actual git add . # O prepara solo un archivo específico git add templates/login.html # Si preparaste algo por error, sácalo de la lista (no borra tus cambios) git restore --staged static/js/login.js # Confirma: lo preparado ahora aparece en verde bajo "Changes to be committed" git status
Guarda el commit
# Crea el commit con un mensaje corto que diga QUÉ hiciste, en presente git commit -m "Agrega formulario de login con validación" # Confirma que el commit se creó y que salió con tu nombre git log --format="%h %an <%ae> %s" -1
Bien: "Agrega vista de registro", "Corrige error al guardar alumno". Mal: "cambios", "asdf", "ya quedó". Tu profesor y tú mismo los van a leer después.
Baja lo nuevo antes de subir
# Trae lo que otros subieron para que GitHub no rechace tu push git pull origin main
Si dice Already up to date, perfecto. Si abre un editor pidiendo mensaje de merge, solo guarda y cierra la pestaña (en Vim: escribe :wq y Enter).
Sube tus commits (git push)
# Sube los commits de tu rama main a la rama main de GitHub git push origin main
Primera vez que subes una rama nueva:
# Sube la rama y la deja conectada con origin (-u); las siguientes veces basta con "git push" git push -u origin feature/login
Enumerating objects: 7, done. Writing objects: 100% (4/4), 512 bytes | 512.00 KiB/s, done. To https://github.com/bernardoprado/mi-proyecto.git 71aa5c2..8f3c2a1 main -> main
Fin: verifica que todo subió
# Debe decir "up to date" y "working tree clean": no queda nada pendiente git status # HEAD -> main y origin/main deben estar en el mismo commit git log --oneline -3 # No debe listar nada: no hay commits sin subir git log origin/main..HEAD --oneline
Por último abre tu repositorio en GitHub y recarga la página: debe aparecer tu mensaje de commit junto a los archivos y la hora "now" o "hace un momento".
Subir un proyecto nuevo a un repositorio vacío
Primero crea el repositorio en GitHub (botón New) sin marcar README, .gitignore ni licencia, para que esté vacío. Copia su URL HTTPS.
Crea el .gitignore (proyectos Python/Django)
# Crea el archivo .gitignore con las carpetas y archivos que nunca deben subirse Set-Content .gitignore "venv/`n.venv/`n__pycache__/`n*.pyc`n.env`ndb.sqlite3" # Muestra el contenido para confirmar que quedó una regla por línea Get-Content .gitignore
También puedes crearlo a mano en VS Code: clic derecho en el explorador → Nuevo archivo → .gitignore, y escribir una regla por línea.
Inicia el repo y haz el primer push
# Convierte la carpeta actual en repositorio de Git (solo se hace una vez) git init # Nombra la rama principal como main git branch -M main # Prepara todos los archivos (los del .gitignore se ignoran solos) git add . # Revisa la lista antes de confirmar; no debe aparecer venv ni .env git status # Crea el primer commit git commit -m "Primer commit: estructura inicial del proyecto" # Conecta tu carpeta con el repositorio vacío de GitHub y lo llama "origin" git remote add origin https://github.com/TU_USUARIO/TU_REPO.git # Confirma que la URL quedó bien escrita git remote -v # Sube la rama main y la deja conectada con origin/main git push -u origin main
Desde ahora, para este proyecto solo usas el escenario push y el escenario pull.
Cambiar de cuenta de GitHub sin errores
Ejemplo típico: en la compu está guardada tu cuenta personal (A) y necesitas subir al repo del equipo o de la escuela con otra cuenta (B). Si solo cambias el nombre y correo, el push sigue saliendo con A y GitHub responde 403.
Inicio: mira qué cuenta está activa
# Lista las cuentas de GitHub guardadas (aquí verás la cuenta A) git credential-manager github list # Muestra la firma global actual git config --global user.name # Muestra el correo global actual git config --global user.email
Cierra la sesión de la cuenta A
# Borra el token de la cuenta A de esta compu git credential-manager github logout USUARIO_A # Confirma que la cuenta A ya no aparece git credential-manager github list
- En el navegador entra a github.com, foto de perfil → Sign out. Si no lo haces, al reconectar el navegador autorizará otra vez a la cuenta A sin preguntarte.
- En VS Code: ícono de Cuentas (abajo a la izquierda) → tu cuenta → Cerrar sesión.
Pon la firma de la cuenta B
Opción 1, para toda la compu (si ahora vas a usar solo B):
# Cambia el nombre global por el de la cuenta B git config --global user.name "Nombre Cuenta B" # Cambia el correo global por el registrado en la cuenta B git config --global user.email "correo-b@ejemplo.com"
Opción 2, solo para este repositorio (si usas A en otros proyectos):
# Sin --global: el nombre solo aplica dentro de este repositorio git config user.name "Nombre Cuenta B" # Sin --global: el correo solo aplica dentro de este repositorio git config user.email "correo-b@ejemplo.com" # Comprueba que el valor viene de .git/config (local) y no del global git config --show-origin user.email
Inicia sesión con la cuenta B
# Abre el navegador para autorizar; entra con la cuenta B git credential-manager github login # Debe aparecer USUARIO_B en la lista git credential-manager github list
Pon el usuario dentro de la URL del repo. Así Git Credential Manager sabe qué cuenta usar en cada proyecto:
# Indica en la URL que este repo se conecta con la cuenta B (USUARIO_B@ antes de github.com) git remote set-url origin https://USUARIO_B@github.com/DUENO_DEL_REPO/TU_REPO.git # Confirma la nueva URL git remote -v
Fin: prueba el acceso y sube
# Si responde con códigos de commits, la cuenta B sí tiene acceso al repo git ls-remote origin # Sube tus cambios ya con la cuenta B git push origin main # Revisa que el último commit salió firmado con los datos de B git log --format="%h %an <%ae> %s" -1
Si ya hiciste un commit con la firma de A (y aún no lo subes)
# Rehace el último commit con el nombre y correo actuales (B) sin cambiar el mensaje git commit --amend --reset-author --no-edit # Confirma que ahora el autor es B git log --format="%h %an <%ae> %s" -1
No uses --amend en commits que ya subiste: reescribe la historia y el siguiente push será rechazado.
Cerrar tu sesión para que nadie suba con tu cuenta
Si la compu no es tuya, deja todo limpio. Si es tu compu personal, no hace falta: la sesión guardada es lo que te evita escribir datos cada vez.
Sube todo antes de irte
# Confirma que no hay cambios sin commit ni commits sin subir git status # Debe salir vacío; si lista commits, haz git push antes de seguir git log origin/main..HEAD --oneline
Borra tu credencial y tu firma
# Cierra tu sesión de GitHub en Git Credential Manager git credential-manager github logout TU_USUARIO # Quita tu nombre de la configuración global de la compu git config --global --unset user.name # Quita tu correo de la configuración global de la compu git config --global --unset user.email # Comprueba que ya no queda ninguna cuenta guardada git credential-manager github list
- En VS Code: Cuentas → tu cuenta → Cerrar sesión.
- En el navegador: github.com → Sign out.
Errores comunes y cómo salir de ellos
Busca aquí el texto rojo que te salió en la terminal. Lee el mensaje completo: casi siempre Git te dice qué hacer.
remote: Permission to dueno/repo.git denied to otra-cuenta. … error: 403Estás conectado con la cuenta equivocada
La credencial guardada es de otra cuenta, o tu cuenta no es colaboradora del repo. El nombre que aparece después de denied to es la cuenta que Git usó.
# Muestra qué cuenta está guardada git credential-manager github list # Borra la cuenta equivocada git credential-manager github logout CUENTA_EQUIVOCADA # Vuelve a intentar; se abrirá el navegador para entrar con la cuenta correcta git push origin main
Si sigue fallando con la cuenta correcta, pide al dueño que te agregue en Settings → Collaborators y acepta la invitación que llega a tu correo.
remote: Support for password authentication was removed … Authentication failedEscribiste tu contraseña en lugar de un token
GitHub ya no acepta contraseñas en la terminal. Usa el inicio de sesión por navegador o pega un token como contraseña (ver paso 02).
# Inicia sesión por navegador para guardar una credencial válida git credential-manager github login
! [rejected] main -> main (fetch first) · Updates were rejected because the remote contains work that you do not haveGitHub tiene commits que tú no tienes
Alguien (o tú desde otra compu) subió cambios. Bájalos primero y después sube.
# Baja y mezcla lo que hay en GitHub git pull origin main # Ahora sí sube tus commits git push origin main
hint: You have divergent branches and need to specify how to reconcile themGit no sabe cómo mezclar en el pull
Tú y GitHub tienen commits distintos. Dile a Git que use merge (lo más sencillo) y repite el pull.
# Configura que los pull mezclen con un commit de merge git config --global pull.rebase false # Repite el pull git pull origin main
CONFLICT (content): Merge conflict in templates/base.html · Automatic merge failedTú y alguien más cambiaron las mismas líneas
- Abre el archivo en VS Code. Verás bloques marcados con
<<<<<<<,=======y>>>>>>>. - Arriba de cada bloque VS Code muestra botones: Aceptar cambio actual (el tuyo), Aceptar cambio entrante (el de GitHub) o Aceptar ambos. Elige y revisa que el código quede bien.
- Guarda el archivo (Ctrl+S) y repite en cada archivo con conflicto.
# Lista los archivos que aún tienen conflicto ("both modified")
git status
# Marca el archivo como resuelto
git add templates/base.html
# Cierra la mezcla con un commit
git commit -m "Resuelve conflicto en base.html"
# Sube el resultado
git push origin main
# Si te arrepientes antes del commit, cancela la mezcla y regresa a como estabas
git merge --abort
error: Your local changes to the following files would be overwritten by mergeTienes cambios sin commit y el pull los pisaría
# Guarda tus cambios en el cajón temporal git stash push -m "antes del pull" # Ahora el pull ya puede entrar git pull origin main # Regresa tus cambios encima de lo nuevo git stash pop
error: src refspec main does not match anyLa rama main no existe o no tiene commits
# Revisa cómo se llama tu rama (quizá es master) git branch # Si aún no hay commits, crea el primero git commit -m "Primer commit" # Si la rama se llama master, renómbrala a main git branch -M main # Intenta subir otra vez git push -u origin main
error: remote origin already existsYa hay un repositorio conectado con ese nombre
# Muestra a qué URL apunta origin ahora git remote -v # Si la URL es otra, cámbiala (no uses "add" otra vez porque origin ya existe) git remote set-url origin https://github.com/TU_USUARIO/TU_REPO.git # Confirma el cambio git remote -v
Si quieres dejarlo todo limpio (remoto, cuenta y rama), sigue la limpieza total del paso 03.
remote: Repository not found · fatal: repository '…' not foundURL mal escrita, repo privado o cuenta sin acceso
- Revisa con
git remote -vque el usuario y el nombre del repo estén bien escritos. - Si el repo es privado, GitHub responde "not found" en lugar de "sin permiso" cuando tu cuenta no tiene acceso. Revisa la cuenta con
git credential-manager github list.
fatal: not a git repository (or any of the parent directories): .gitLa terminal está en la carpeta equivocada
# Muestra dónde estás parado pwd # Muévete a la carpeta del proyecto (con comillas si tiene espacios) cd "C:\ruta\de\tu\proyecto" # Confirma que ya responde Git git status
Se abrió una pantalla rara con ~ a la izquierda y no puedo escribirGit abrió el editor Vim para un mensaje
Presiona Esc, escribe :wq y presiona Enter para guardar y salir. Para que no vuelva a pasar, usa VS Code como editor:
# Git abrirá una pestaña de VS Code y esperará a que la cierres git config --global core.editor "code --wait"
warning: in the working copy of '…', LF will be replaced by CRLFAviso de fin de línea, no es error
Es solo un aviso de Windows sobre saltos de línea. Tu commit sí se hizo. Puedes ignorarlo.
Subí por error venv/ o .env a GitHubQuitarlos del repo sin borrarlos de tu compu
# Deja de rastrear la carpeta venv pero la conserva en tu compu git rm -r --cached venv # Deja de rastrear el archivo .env pero lo conserva en tu compu git rm --cached .env # Prepara el .gitignore que ya incluye venv/ y .env git add .gitignore # Guarda el cambio git commit -m "Quita venv y .env del repositorio" # Sube la corrección git push origin main
Siguen visibles en el historial de GitHub. Cámbialas (la de la base de datos, la SECRET_KEY de Django, etc.).
Chuleta final
Para tenerla a la mano cuando ya te sepas el proceso. Cada comando trae su explicación en la tercera columna.
| Quiero… | Comando | Qué hace (explicación) |
|---|---|---|
| Cuenta | ||
| Ver cuenta con permiso | git credential-manager github list | Lista las cuentas de GitHub guardadas en esta compu. La que aparece es la que GitHub usa para darte o negarte permiso de push. |
| Ver firma: nombre | git config user.name | Muestra el nombre que se escribe dentro de cada commit en este repo. Solo es la firma, no da permisos. |
| Ver firma: correo | git config user.email | Muestra el correo de tus commits. GitHub lo usa para ligar el commit a tu perfil; debe estar registrado en tu cuenta. |
| Desconectar una cuenta | git credential-manager github logout USUARIO | Borra el token guardado de esa cuenta. El próximo push o pull te pedirá iniciar sesión otra vez. |
| Conectar una cuenta | git credential-manager github login | Abre el navegador para que inicies sesión y autorices a Git. Guarda el token de esa cuenta en Windows. |
| Probar acceso al repo | git ls-remote origin | Le pide a GitHub la lista de ramas sin descargar nada. Si responde con códigos, tu cuenta sí tiene acceso; si da error 403 o "not found", no. |
| Repositorio | ||
| Carpeta raíz del repo local | git rev-parse --show-toplevel | Muestra la carpeta de tu compu que tiene el .git que se está usando. Sirve para confirmar que trabajas en el proyecto correcto. |
| ¿Ya hay remoto? ¿A qué repo apunta? | git remote -v | Lista los remotos y su URL. "fetch" es de donde bajas y "push" a donde subes. Si no sale nada, no hay remoto conectado. |
| Detalle de push/pull por rama | git remote show origin | Muestra las URLs de origin, la rama principal y qué rama local sube y baja a cuál, con su estado (up to date, para subir o para bajar). |
| Cambiar URL del remoto | git remote set-url origin URL | Cambia a qué repo de GitHub apunta el origin que ya existe. Úsalo en lugar de add cuando origin ya está activo. |
| Borrar el remoto | git remote remove origin | Quita la conexión con GitHub. No borra tus archivos ni tus commits, solo el apodo "origin" y su URL. |
| Agregar el remoto | git remote add origin URL | Conecta la carpeta con un repo de GitHub y lo llama "origin". Solo funciona si origin todavía no existe. |
| Ramas | ||
| Ver rama actual | git branch --show-current | Muestra solo el nombre de la rama en la que estás. Ahí caerán tus commits y desde ahí harás push. |
| Ver todas las ramas | git branch -a | Lista tus ramas locales y las de GitHub (las que empiezan con remotes/origin/). La que tiene * es la actual. |
| Cambiar de rama | git switch NOMBRE | Te mueve a otra rama y cambia tus archivos a como están en ella. Si tienes cambios sin commit puede negarse; usa git stash. |
| Crear rama y cambiarte | git switch -c NOMBRE | Crea una rama nueva a partir de donde estás y te cambia a ella en un solo paso. |
| Commits | ||
| Ver historial | git log --oneline -10 | Muestra los últimos 10 commits, uno por línea, el más reciente arriba. HEAD es donde estás y origin/main hasta dónde llega GitHub. |
| Actualizar info de GitHub | git fetch | Descarga la información nueva de GitHub sin tocar tus archivos. Hazlo antes de comparar, para que la comparación sea real. |
| Commits sin subir | git log origin/main..HEAD --oneline | Lista los commits que tienes en tu compu y GitHub todavía no. Si sale vacío, no tienes nada pendiente de push. |
| Commits sin bajar | git log HEAD..origin/main --oneline | Lista los commits que están en GitHub y tú todavía no. Si sale vacío, no tienes nada pendiente de pull. |
| Pull y push | ||
| Bajar cambios | git pull origin main | Trae los commits de la rama main de GitHub y los mezcla con tu rama actual. Tus archivos se actualizan. |
| Subir 1: preparar | git add . | Prepara todos los archivos cambiados y nuevos de la carpeta para el próximo commit (respeta el .gitignore). |
| Subir 2: guardar | git commit -m "…" | Guarda lo preparado como un commit en tu compu con el mensaje que escribas entre comillas. Todavía no llega a GitHub. |
| Subir 3: bajar lo nuevo | git pull origin main | Trae lo que otros subieron antes de que tú subas, para que GitHub no rechace tu push con "fetch first". |
| Subir 4: subir | git push origin main | Envía tus commits de la rama main al repo origin en GitHub. Aquí es donde se usa la credencial de tu cuenta. |
| Primer push de una rama | git push -u origin NOMBRE | Sube la rama y con -u la deja conectada con su gemela en GitHub. Después basta con escribir git push. |
La rutina de cada día
Cada bloque trae un comentario por línea. Corre los comandos uno por uno y lee la respuesta antes de seguir.
Al llegar (antes de programar)
# Revisa la rama, si tienes cambios sin guardar y si vas adelante o atrás de GitHub git status # Confirma con qué cuenta de GitHub te vas a conectar git credential-manager github list # Confirma de qué repositorio de GitHub vas a bajar y a cuál vas a subir git remote -v # Confirma que estás en la rama en la que quieres trabajar git branch --show-current # Baja lo que tu equipo (o tú desde otra compu) subió, antes de empezar a cambiar código git pull origin main
Mientras trabajas
Haz commits pequeños con mensajes claros cada vez que termines algo que funcione, por ejemplo "Agrega vista de registro".
Al irte (subir todo)
# Prepara todos los archivos que cambiaste para el commit git add . # Guarda los cambios en un commit con un mensaje que diga qué hiciste git commit -m "Describe aquí lo que hiciste" # Baja lo nuevo de GitHub para que no te rechacen el push git pull origin main # Sube tus commits a GitHub git push origin main # Confirma que dice "up to date" y "working tree clean": todo quedó arriba git status
En compu prestada (al final)
# Cierra tu sesión de GitHub en esta compu para que nadie suba con tu cuenta git credential-manager github logout TU_USUARIO # Confirma que tu cuenta ya no aparece en la lista git credential-manager github list