Índice de la guía
    Guía de práctica · APLICAWEB 4°

    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.

    PS C:\proyecto> git status # siempre el primer comando

    ¿Qué necesitas hacer hoy?

    Cómo leer los bloques de código

    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.

    Zona 1Tu carpetaArchivos que editas en VS Code. Git los ve como "modificados".
    Zona 2Preparados (staging)Lo que elegiste con git add para el próximo commit.
    Zona 3Repo localTus commits guardados en tu compu, carpeta oculta .git.
    Zona 4 · originGitHubLa copia en internet. Solo llega ahí lo que subes con push.
    git add 1 → 2 git commit 2 → 3 git push 3 → 4
    git pull 4 → 3 → 1  (trae de GitHub y actualiza tus archivos)
    Paso 00 · siempre

    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

    1. En VS Code: Archivo → Abrir carpeta… (Ctrl+K Ctrl+O).
    2. Elige la carpeta raíz, la que tiene (o va a tener) la carpeta oculta .git.
    3. 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 git de 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
    
    Lo que vas a ver si todo está bien
    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
    Si ves "fatal: not a git repository"

    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.

    Paso 01 · siempre

    ¿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.

    Identidad 1 · firma

    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.

    Identidad 2 · permiso

    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
    
    Ejemplo
    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
    
    Ejemplo
    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
    
    Lo que vas a ver
    origin  https://github.com/bernardoprado/mi-proyecto.git (fetch)
    origin  https://github.com/bernardoprado/mi-proyecto.git (push)
    8f3c2a1e4b...   HEAD
    8f3c2a1e4b...   refs/heads/main
    Fíjate en el dueño

    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
    
    Paso 02 · cuando algo no coincide

    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.

    Corregir firma→Borrar credencial vieja→Iniciar sesión de nuevo→Probar acceso

    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
    
    Si no quieres mostrar tu correo

    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
    
    1. Aparece una ventana "Connect to GitHub". Elige Sign in with your browser.
    2. En el navegador revisa arriba a la derecha que sea la cuenta correcta. Si no, cierra sesión ahí primero.
    3. Da clic en Authorize git-ecosystem y regresa a VS Code.
    También se reconecta solo

    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.
    El token es como tu contraseña

    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.

    Paso 03 · siempre

    ¿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.

    Local · tu compu

    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.

    Remoto · GitHub

    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
    
    Ejemplo
    C:/PRADO/UTH 2026-3/APLICAWEB-4TO/mi-proyecto
    Si sale una carpeta más arriba de la que esperabas

    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
    
    Cómo se lee 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.git lees 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 -v no 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}"
    
    Ejemplo
    ## 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

    1. 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.
    2. 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.
    3. 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:

    El rechazo
    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
    
    Si tienes dos remotos

    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→2 · Cuenta→3 · Rama→Push
    # 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
    
    Si el repo de GitHub es nuevo y está vacío

    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.

    Si el pull dice "refusing to merge unrelated histories"

    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.

    Paso 04 · siempre

    ¿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
    
    Ejemplo de 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

    El error
    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
    
    Paso 05 · antes de pull y push

    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
    
    Cómo se lee
    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í 8f3c2a1 y 4d9e0b7) 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.

    Escenario A · bajar cambios

    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.

    Inicio→Cuenta→Rama→Carpeta limpia→fetch→pull→Verificar

    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
    
    Si git status muestra archivos en rojo o verde

    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
    
    Ejemplo
    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
    
    Ejemplo de éxito
    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
    
    Así termina bien
    On branch main
    Your branch is up to date with 'origin/main'.
    nothing to commit, working tree clean
    Si es un proyecto Django

    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 .
    
    Escenario B · subir cambios

    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→Cuenta→Rama→add→commit→pull→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
    
    Ejemplo
    Changes not staged for commit:
            modified:   templates/login.html
    Untracked files:
            static/js/login.js
    Revisa que no se cuele basura

    Si 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
    
    Buenos mensajes

    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
    
    Ejemplo de éxito
    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".

    Escenario C · primera vez

    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.

    Escenario D · cuenta A → cuenta B

    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.

    Ver cuenta actual→logout A→salir de A en el navegador→firma de B→login B→probar y push

    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
    
    Si necesitas tener A y B guardadas al mismo tiempo

    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
    
    Solo antes del push

    No uses --amend en commits que ya subiste: reescribe la historia y el siguiente push será rechazado.

    Al terminar · compu compartida o del laboratorio

    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.
    Si algo sale mal

    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
    1. Abre el archivo en VS Code. Verás bloques marcados con <<<<<<<, ======= y >>>>>>>.
    2. 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.
    3. 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 -v que 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
    
    Si .env tenía contraseñas

    Siguen visibles en el historial de GitHub. Cámbialas (la de la base de datos, la SECRET_KEY de Django, etc.).

    Resumen

    Chuleta final

    Para tenerla a la mano cuando ya te sepas el proceso. Cada comando trae su explicación en la tercera columna.

    Quiero…ComandoQué hace (explicación)
    Cuenta
    Ver cuenta con permisogit credential-manager github listLista 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: nombregit config user.nameMuestra el nombre que se escribe dentro de cada commit en este repo. Solo es la firma, no da permisos.
    Ver firma: correogit config user.emailMuestra el correo de tus commits. GitHub lo usa para ligar el commit a tu perfil; debe estar registrado en tu cuenta.
    Desconectar una cuentagit credential-manager github logout USUARIOBorra el token guardado de esa cuenta. El próximo push o pull te pedirá iniciar sesión otra vez.
    Conectar una cuentagit credential-manager github loginAbre el navegador para que inicies sesión y autorices a Git. Guarda el token de esa cuenta en Windows.
    Probar acceso al repogit ls-remote originLe 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 localgit rev-parse --show-toplevelMuestra 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 -vLista 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 ramagit remote show originMuestra 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 remotogit remote set-url origin URLCambia a qué repo de GitHub apunta el origin que ya existe. Úsalo en lugar de add cuando origin ya está activo.
    Borrar el remotogit remote remove originQuita la conexión con GitHub. No borra tus archivos ni tus commits, solo el apodo "origin" y su URL.
    Agregar el remotogit remote add origin URLConecta la carpeta con un repo de GitHub y lo llama "origin". Solo funciona si origin todavía no existe.
    Ramas
    Ver rama actualgit branch --show-currentMuestra 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 ramasgit branch -aLista tus ramas locales y las de GitHub (las que empiezan con remotes/origin/). La que tiene * es la actual.
    Cambiar de ramagit switch NOMBRETe 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 cambiartegit switch -c NOMBRECrea una rama nueva a partir de donde estás y te cambia a ella en un solo paso.
    Commits
    Ver historialgit log --oneline -10Muestra 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 GitHubgit fetchDescarga la información nueva de GitHub sin tocar tus archivos. Hazlo antes de comparar, para que la comparación sea real.
    Commits sin subirgit log origin/main..HEAD --onelineLista los commits que tienes en tu compu y GitHub todavía no. Si sale vacío, no tienes nada pendiente de push.
    Commits sin bajargit log HEAD..origin/main --onelineLista 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 cambiosgit pull origin mainTrae los commits de la rama main de GitHub y los mezcla con tu rama actual. Tus archivos se actualizan.
    Subir 1: preparargit add .Prepara todos los archivos cambiados y nuevos de la carpeta para el próximo commit (respeta el .gitignore).
    Subir 2: guardargit 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 nuevogit pull origin mainTrae lo que otros subieron antes de que tú subas, para que GitHub no rechace tu push con "fetch first".
    Subir 4: subirgit push origin mainEnví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 ramagit push -u origin NOMBRESube 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