Git · 07
Problemas comunes
Pegá en el buscador una parte del mensaje de error. Cada caso explica qué significa, por qué pasa y cómo se arregla. Los mensajes de Git están en inglés: acá van tal cual aparecen.
Antes de buscar
Tres comandos que aclaran casi cualquier situación, y no modifican nada:
git status- En qué rama estás, qué cambió y, muchas veces, qué comando sugiere Git para seguir (leé las líneas entre paréntesis).
git log --oneline -5- Los últimos commits, para saber dónde estás parado.
git remote -v- A qué repositorio de GitHub está conectada la carpeta.
1
Al empezar
No es un repositorio
fatal: not a git repository (or any of the parent directories): .git- Qué pasa
- La terminal está en una carpeta que no tiene repositorio Git (ni ella ni las de arriba tienen
.git). - Solución
- Entrá a la carpeta correcta con
cd, o si es un proyecto nuevo, creá el repo congit init.
Git no sabe quién sos
Author identity unknown
*** Please tell me who you are.- Qué pasa
- Falta configurar nombre y email, que van en cada commit.
- Solución
git config --global user.name "<Tu Nombre>" git config --global user.email "<tu-email>"
Nada para commitear
no changes added to commit (use "git add" and/or "git commit -a")- Qué pasa
- Modificaste archivos pero no los preparaste. El commit solo incluye lo que pasó por
git add. - Solución
git add .(o el archivo puntual) y despuésgit commit -m "…". Si dice “nothing to commit, working tree clean”, no hay ningún cambio desde el último commit.
Se abrió una pantalla rara y no puedo salir
- Qué pasa
- Git abrió su editor por defecto (Vim) para que escribas un mensaje, por ejemplo al hacer un merge o un commit sin
-m. - Solución
- Para guardar y salir: Esc, después escribí
:wqy Enter. Para no volver a verlo, configurá VS Code como editor:git config --global core.editor "code --wait".
2
Al subir (push)
Push rechazado: el remoto tiene cambios que no tenés
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'https://github.com/...'
hint: Updates were rejected because the remote contains work that you do not have locally.- Qué pasa
- Alguien (o vos desde otra PC, o editando en la web de GitHub) subió commits que tu copia no tiene. Git no te deja pisarlos.
- Solución
Sigit pull git pushpullmarca conflictos, resolvelos (ver Ramas). No uses--forcepara “arreglarlo”.
Historias no relacionadas
fatal: refusing to merge unrelated histories- Qué pasa
- Creaste el repo en GitHub con un README (u otro archivo) y también tenías commits locales: son dos historiales que no comparten ningún commit.
- Solución
Para la próxima: creá el repo de GitHub vacío.git pull origin main --allow-unrelated-histories git push -u origin main
No hay nada que subir con ese nombre
error: src refspec main does not match any- Qué pasa
- No existe una rama local
main: todavía no hiciste ningún commit, o la rama se llamamaster. - Solución
- Hacé al menos un commit y renombrá la rama:
git branch -M main. Despuésgit push -u origin main.
El remoto ya existe
error: remote origin already exists.- Solución
- Ya está conectado. Para cambiar la dirección:
git remote set-url origin <url-nueva>. Verificá congit remote -v.
GitHub bloquea el push por un secreto
remote: error: GH013: Repository rule violations found for refs/heads/main.
remote: - Push cannot contain secrets- Qué pasa
- La protección de GitHub detectó una clave o token en tus commits y frenó el push (por suerte).
- Solución
- Sacá el secreto del archivo, movelo a
.env(en el.gitignore) y corregí el commit local: si es el último,git commit --amend; si es más viejo,git reset --soft <hash-anterior>y volvé a commitear. Considerá ese secreto expuesto y regeneralo.
Archivo demasiado grande
remote: error: File video.mp4 is 150.00 MB; this exceeds GitHub's file size limit of 100.00 MB- Qué pasa
- GitHub no acepta archivos de más de 100 MB, aunque ya los hayas borrado en un commit posterior (siguen en el historial).
- Solución
- Sacalo de los commits que todavía no subiste (
git reset --soft origin/main, despuésgit rm --cached video.mp4, agregalo al.gitignorey volvé a commitear). Para versionar archivos grandes existe Git LFS.
3
Inicio de sesión
La contraseña no funciona
remote: Support for password authentication was removed on August 13, 2021.
fatal: Authentication failed for 'https://github.com/...'- Qué pasa
- GitHub no acepta la contraseña de tu cuenta desde la terminal.
- Solución
- Iniciá sesión con el navegador (Git Credential Manager) o usá un token personal en lugar de la contraseña. Pasos en GitHub y remotos.
No puede pedirte usuario
fatal: could not read Username for 'https://github.com': terminal prompts disabled- Qué pasa
- Git necesita que inicies sesión, pero lo ejecutó un programa que no puede mostrarte la ventana de login (un script, una herramienta automática, algunos editores).
- Solución
- Hacé el
git pushuna vez desde una terminal normal (PowerShell o la de VS Code): ahí aparece el login del navegador y la sesión queda guardada para las demás herramientas.
SSH sin permiso
git@github.com: Permission denied (publickey).- Qué pasa
- El remoto usa SSH y GitHub no reconoce ninguna clave de tu PC.
- Solución
- Creá una clave y agregala a GitHub (ver SSH), o pasá a HTTPS:
git remote set-url origin https://github.com/<usuario>/<repo>.git.
Sesión de otra cuenta guardada
remote: Permission to <usuario>/<repo>.git denied to <otra-cuenta>.- Qué pasa
- Windows tiene guardada la sesión de otra cuenta de GitHub.
- Solución
- Abrí Administrador de credenciales de Windows → Credenciales de Windows → borrá la entrada
git:https://github.com. En el próximo push, iniciá sesión con la cuenta correcta.
4
Ramas y merges
Conflicto al unir
CONFLICT (content): Merge conflict in app.js
Automatic merge failed; fix conflicts and then commit the result.- Qué pasa
- Las dos ramas cambiaron las mismas líneas. No es un error: Git te pide que elijas.
- Solución
- Editá el archivo, dejá la versión correcta y borrá las marcas
<<<<<<<=======>>>>>>>; despuésgit add app.jsygit commit. Para cancelar:git merge --abort. Paso a paso en Ramas.
Detached HEAD
You are in 'detached HEAD' state.- Qué pasa
- Estás mirando un commit puntual (o un tag), no una rama. Podés ver y probar, pero los commits que hagas no quedan en ninguna rama.
- Solución
- Para volver:
git switch main. Si hiciste commits ahí y los querés conservar:git switch -c rama-nuevaantes de irte.
Cambios locales en el camino
error: Your local changes to the following files would be overwritten by checkout:
app.js
Please commit your changes or stash them before you switch branches.- Qué pasa
- Tenés cambios sin commitear en archivos que la otra rama (o el
pull) necesita modificar. - Solución
- Commitealos, o guardalos un rato:
git stash→ cambiás de rama o hacés pull →git stash pop.
No encuentra la rama
fatal: invalid reference: feature-x
error: pathspec 'feature-x' did not match any file(s) known to git- Qué pasa
- El nombre está mal escrito o la rama existe solo en GitHub y tu PC todavía no se enteró.
- Solución
git fetchy despuésgit switch feature-x(Git crea la rama local a partir deorigin/feature-x).git branch -alista todas.
5
Archivos
Aviso de LF y CRLF
warning: in the working copy of 'app.js', LF will be replaced by CRLF the next time Git touches it- Qué pasa
- Es un aviso, no un error. Windows y Linux marcan el fin de línea distinto; con
core.autocrlf=trueGit convierte solo y te avisa. - Solución
- No hace falta hacer nada. Si querés reglas fijas por proyecto, agregá un
.gitattributescon* text=auto.
El .gitignore no ignora un archivo
- Qué pasa
- El
.gitignoresolo afecta archivos que Git todavía no sigue. Si el archivo ya estaba en un commit, se sigue rastreando. - Solución
El archivo queda en tu disco, pero sale del repo (en los commits viejos sigue estando).git rm --cached .env git commit -m "Deja de versionar .env"
Subí una contraseña o un secreto
- Qué pasa
- Borrarlo en un commit nuevo no alcanza: sigue en el historial y cualquiera con acceso al repo lo puede ver.
- Solución
- 1) Cambiá la contraseña o regenerá la clave: es lo único que te protege de verdad. 2) Sacala del repo (
git rm --cached) y agregá el archivo al.gitignore. 3) Si hace falta borrarla del historial, existen herramientas comogit filter-repo, y después hay que forzar el push.
El README se ve con caracteres raros en GitHub
# d o c k e r - c h e a t s h e e t- Qué pasa
- Usaste
echo "..." >> README.mden Windows PowerShell 5.1: guarda el texto en UTF-16, y GitHub espera UTF-8. Por eso aparecen espacios o caracteres raros entre las letras. - Solución
- Abrí el archivo en VS Code, corregí la línea, y en la barra inferior hacé clic en la codificación → Save with Encoding → UTF-8. Para escribir archivos desde PowerShell:
Set-Content -Encoding utf8en lugar de>o>>.
No encontré ese problema. Probá con otra parte del mensaje de error.