Mi computadora se apagó y ahora uno de mis repositorios de git está roto. Cuando trato de pagar master, me dice:
warning: ignoring broken ref refs/heads/master.
error: Your local changes to the following files would be overwritten by checkout:
com.vainolo.jdraw2d.releng.p2/pom.xml
Please, commit your changes or stash them before you can switch branches.
Aborting
Cuando ejecuto git stash
obtengo:
fatal: bad revision 'HEAD'
fatal: bad revision 'HEAD'
fatal: Needed a single revision
You do not have the initial commit yet
¿Entonces Que puedo hacer?
Actualizar
salida de git reflog
:
fatal: bad default revision 'HEAD'
No muy prometedor ... Resultado de git fsck
:
error: Invalid HEAD
Checking object directories: 100% (256/256), done.
error: unable to unpack 59551f96b4e87a1c14293c19eb548ce6fa1f196f header
error: inflateEnd: stream consistency error (no message)
fatal: loose object 59551f96b4e87a1c14293c19eb548ce6fa1f196f (stored in .git/objects/59/551f96b4e87a1c14293c19eb548ce6fa1f196f) is corrupt
.git/refs/heads/master
existe y si su contenido es un hash de confirmación válido de su repositorio (puede comprobarlo, por ejemplo, usandogit show <hash>
)?.git/refs/heads/master/
son un montón de^@
git reflog
te dice? ¿Has probado a corrergit fsck
?Respuestas:
Logré recuperarme a través de:
fuente
rm <root repository path>/.git/modules/<path to the submodule>/refs/remotes/origin/HEAD
rm -rf .git/refs/remotes/origin
, pero meComience siguiendo los pasos sugeridos en Recuperación del repositorio de git roto :
.git/refs
todavía contiene algo útilgit reflog
y en su defecto que el contenido de.git/logs/refs/heads/master
o cualquier rama en la que estuviste por última vezgit fsck
, potencialmente con--unreachable
o--lost-found
Con suerte, esto le permitirá averiguar cuál
master
debería ser la referencia para que pueda restaurarla (es decir, colocar el SHA1 correcto.git/refs/heads/master
).En caso de que cualquier objeto contenido en esa confirmación esté realmente dañado,
HEAD
lamentablemente no podrá restaurar su confirmación. Suponiendo que su árbol de trabajo y / o índice están intactos, puede intentargit reset --soft
(o en su defecto agit reset
) la confirmación anterior y luego volver a realizar la confirmación. Evite cualquier operación que cambie su árbol de trabajo sagit checkout -f
ogit reset --hard
.fuente
.git/logs/refs/heads/mybranch
. Muestra algún tipo de historial de confirmaciones en esta rama. Indagando en eso, elegí SHA y traté de mostrarlos congit show
. (Cada confirmación tiene dos SHA, elegí el segundo, justo antes del nombre del autor). El último estaba dañado, pero el anterior podría sergit show
ny pude presionarlo congit push origin abcdef:mybranch
.Tuve un problema similar después de una pantalla azul de la muerte en Windows 8.1
Tenía un archivo en esta ubicación ...
C:\www\<project>\.git\refs\remotes\origin\<problem-branch>
Y estaba vacío mientras que los otros archivos de rama en esta carpeta tienen cadenas largas dentro de ellos.
NB no tuve ningún cambio / confirmación
<problem-branch>
archivogit fetch --all
para conseguir la rama de nuevoLuego, la pestaña de autocompletar comenzó a funcionar nuevamente
fuente
Si no hay muchos archivos modificados, creo que la forma conveniente de resolver este problema es:
git commit -a
fuente
Logré resolver esto eliminando el archivo maestro en el directorio git \ refs \ heads
fuente
Después de una congelación computarizada y accidente, mi git branch fue dañado con el mensaje:
git fatal: your current branch appears to be broken
. No podría hacer nada.Después de hacerlo,
git fsck
mencioné que la rama tenía unerror: Invalid HEAD
.refs/heads/<branch>
tenía uninvalid sha1 pointer
.Después de seguir las opciones aquí, abrí
.git/refs/heads/<branch>
en un editor de notepad ++, y cada uno de los caracteres sha1 eraNUL
.Afortunadamente, solo necesitaba restablecer la rama al estado remoto, y eso estaba en un repositorio de bitbucket. Cogí el sha1 de la punta del repositorio remoto y lo copié en el
.git/refs/heads/<branch>
guardado, luego hice ungit reset --hard HEAD
, y todo volvió a la normalidad.fuente
Fui lo suficientemente idiota como para olvidar presionar y mi computadora se bloqueó mientras realizaba una confirmación. Sin embargo, pude recuperar todo menos el último compromiso abriendo .git / logs / refs / heads /
Este archivo contiene todas las confirmaciones (con sus SHA) a la rama, lo que hice para recuperar fue:
git checkout master
git reset --hard
Entonces, incluso cuando comete un error tonto, no se verá atraído inmediatamente por un día completo de trabajo con git :)
fuente
Sé que es una respuesta demasiado tarde, pero recibí este error porque no tenía un
origin/head
. Puede averiguarlo ejecutandogit branch -r
. Si no ve queorigin/head
apunta a un origen remoto, puede configurarlo ejecutandogit remote set-head origin {{your branch name}}
.Ahora ejecute de
git branch -r
nuevo, y debería ver algo como esto:origin/HEAD -> origin/develop
Espero que esto ayude a cualquier otra persona que se encuentre con este problema.
fuente
No pude pagar mi rama maestra debido al error de no se puede bloquear la referencia. Terminé borrando:
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master
y llamando a este comando git:
fuente
Perdóname si repetiría después de alguien (no he leído todos los comentarios). En mi opinión, la forma más sencilla de resolver el problema es copiar el proyecto sin .git y .idea, limpiarlo, clonar desde git, eliminar todo excepto los directorios anteriores y luego pegar la copia anterior en el repositorio recién creado con .git y .idea . Espero que tenga sentido.
fuente
Mi computadora falló dos veces y, como resultado, mi repositorio de git se rompió localmente. No pude extraer mis cambios, me pidió establecer un origen remoto pero no funcionó en gitKraken.
En mi símbolo del sistema, recibía este error
Sabía que mis referencias estaban rotas y necesitaban ser reparadas. Lo que tenía que hacer era git bash (En SourceTree, haga clic en "terminal"). Luego navega a la carpeta de referencias como esta
habrá un nombre de archivo
master
allí, utilícelols
para ver qué hay en el directorio. Luego simplemente elimínelo usando rm masterbam, el archivo dañado se ha ido. Ahora, si emite el comando git branch -a, generaría esto
Luego emita este comando y arreglará sus referencias
Para resumir, si intenta tirar del control remoto, debería mostrar un nombre remoto en blanco que se ha corregido.
fuente
Tuve el mismo problema pero no tuve suerte, no pude resolver el problema. Llevé mi repositorio a un lado, volví a clonar el del servidor y traté de fusionarlos. Por supuesto, mostró muchos archivos no relacionados con mi rama, pero ayudó a aislar los archivos necesarios.
fuente
Compruebe si MSWindows creó archivos desktop.ini que comparten el git. lo hace por mi. Una vez que los elimino todos en las subcarpetas del directorio .git, entonces funciona.
fuente
Tuve este mismo problema cuando Android Studio terminó repentinamente (debido a la pérdida de energía de la computadora).
Lo resolví copiando el contenido de mi
C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\refs\heads\master
archivo a miC:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\refs\remotes\origin\master
archivo.(Anteriormente, también había activado la opción 'Force Push' en Android Studio, pero no creo que este sea un paso necesario).
Nota:
He encontrado esta solución, comparando el contenido de los archivos en mi
C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\
directorio (inc subdirectorios.) A los archivos correspondientes de los de otra sana proyecto - por ejemplo,C:\Users\myusername\AndroidStudioProjects\MyHealthyApp\.git\
.Es posible que tenga un archivo diferente que esté dañado, pero al compararlo con otro proyecto en buen estado, debería poder detectar rápidamente lo que está mal.
Si no tiene otro proyecto saludable que tenga configurado git, puede valer la pena crear uno simple de la misma manera que creó su proyecto roto para que pueda investigar, comparar y arreglar, etc.
PD - Mi mensaje de error (editado) fue:
warning: ignoring broken refs/remotes/origin/master.fatal bad revision 'refs/remotes/origin/master..refs/heads/master' during executing git -c core.quotepath=false log refs/remotes/origin/master..refs/heads/master --pretty=format --encoding=UTF-8 -M --name-status -c --
fuente