Estoy usando git, e hice un pequeño commit seguido de uno grande. Decidí usar git rebase
para aplastar los dos commits juntos antes de empujarlos. (Nunca he hecho esto antes.)
Así que lo hice:
git rebase -i HEAD~2
Esto me dio mi editor, donde elegí elegir el commit anterior y aplastar el posterior. Cuando salvé, git dijo:
error: no puede stat ' nombre de archivo ': permiso denegado
No se pudo aplicar sha1 para una confirmación posterior ... línea de texto inicial para esa confirmación
Ahora:
- Ninguno de los compromisos aparece cuando lo hago
git log
. git status
me dice que "Actualmente no estoy en ninguna rama".- Un archivo aparece como modificado y en el índice, y dos archivos aparecen como no rastreados. Mi primera confirmación tenía solo un archivo (creo), y mi segunda confirmación tenía una buena docena.
¿¡Que pasó!? ¿Cómo lo soluciono?
git
git-rebase
Ryan Lundy
fuente
fuente
Respuestas:
Solo he visto este error en Windows y lo que parece significar es que algo bloqueó a git para modificar un archivo en el momento en que intentó aplicar un parche.
Windows tiende a dar a los procesos acceso exclusivo a los archivos cuando realmente no debería ser necesario, en el pasado, los verificadores de virus han sido una fuente de sospecha, pero nunca he demostrado esto de manera concluyente.
Probablemente la cosa más fácil de hacer es abortar e intentar nuevamente, esperando que no suceda la próxima vez.
Puede intentar usar
git apply
y conocer lo que commit git realmente estaba tratando de hacer antes de hacerlo,git rebase --continue
pero honestamente, no recomendaría esto. La mayoría de las veces que he visto esto intentado, ha habido una posibilidad mejor de lo normal de que algo se pierda o se arruine accidentalmente.fuente
git checkout -- previously-locked-file
y volver a estar en funcionamiento.git checkout
para recuperar el archivo (git status
se eliminó), y ahora todo está de vuelta como estaba antes de intentar volver a modificar / aplastar. Quizás debería intentarlo de nuevo, aunque en este punto me siento un poco mareado.Intente cerrar cualquier programa que tenga la carpeta abierta, como editores, ventanas del explorador, mensajes de comando y programas FTP. Esto siempre me soluciona el problema en Windows.
fuente
Simplemente cierre su IDE (VISUAL STUDIO / ATOM, etc.). Podría funcionar
fuente
Cuando veo esto en mi máquina, es peor que un simple "algún proceso tiene el archivo abierto". La propiedad real del archivo se eleva hasta el punto en que yo (ejecutándome como administrador) solo puedo acceder a él después de reiniciar.
Lo más cerca que puedo decir, IIS es parte del problema. Si cambio entre dos ramas principales que requieren una gran cantidad de archivos para modificar, git eliminará un archivo o directorio (generalmente DLL) mientras IIS intenta hacer algo u otro con él. En este punto, el proceso de IIS sobrescribe automáticamente el archivo en el disco con una versión que está bloqueada y parece no ser propiedad de nadie.
Detener IIS en este punto no lo hace. Lo mejor que he descubierto es reiniciar y recordar detener IIS antes de cambiar en las sucursales principales en el futuro.
Sé que eso realmente no responde la pregunta, pero podría ser útil para otros.
fuente
iisreset
parece liberar los bloqueos de archivo.iisreset
solución.En Windows, puede ser un proceso TortoiseGIT que bloquea esos archivos. Abra el administrador de tareas y finalice el proceso TGitCache.exe .
fuente
Me topé con este hilo de respuestas: este error es un error falso. # Error: no se puede stat 'reddit / app / views / links': permiso denegado
Eso es todo lo que tengo, cuando trato de fusionarme. Leí algunas de las respuestas y luego me di cuenta: todo lo que tenía que hacer era cerrar mi editor de código, que resulta ser Atom.
Una vez que cerré el editor, volví a ejecutar "git merge" y boom, funcionó.
Qué error sin sentido :(
fuente
si usa vscode, elimine el terminal y abra uno nuevo. de lo contrario tal vez también cierre la terminal
fuente
Esto me sucede ocasionalmente en Windows
Muy a menudo tengo varias instancias de bit bash abiertas, y una de las instancias de git bash está en un directorio que no existe en la rama remota de la que estoy sacando.
Cerrar todas las instancias de git bash menos una me resuelve el problema.
fuente
Si el IDE que usa (en caso de que use uno) también podría haberse interpuesto. Eso es lo que me pasó cuando usé QtCreator.
fuente
Usando SourceTree en Win 10, solucionó el problema cerrando el editor Atom.
Error de reproducción:
fuente
Esto también puede suceder cuando usa SublimeText y la ventana emergente que le pide que compre el programa no está cerrada.
fuente
Esto sucede a menudo cuando tiene aplicaciones / software de preprocesamiento que miran el proyecto, como Prepros o Codekit. Además, Atom y Sublime (e incluso Notepad ++) pueden hacer que esto suceda si un archivo del proyecto se está editando actualmente.
La forma más fácil de solucionar el problema es cerrar todo lo que tenga abiertos los archivos del proyecto, fusionar sus ramas y luego volver a abrirlos para actualizarlo. Esto también evitará cualquier problema en el que el programa ya no esté al tanto de los cambios que han sucedido, lo que le obligará a actualizar los proyectos a mano.
fuente
Si está ejecutando webpack, apáguelo. Cierra tu IDE también. Debería funcionar bien después de hacer esas cosas.
fuente
Tuve un problema similar. Pero fue muy simple de resolver. En una máquina con Windows, mi explorador de archivos tenía una carpeta abierta que existía en una rama pero no en la otra que verifiqué. Al cerrar el Explorador de archivos se resolvió el problema.
fuente
Acabo de tener esto en Win 7.
$ git stash pop error: no puede stat 'parentFolder / subfolder': Permiso denegado error: no puede stat 'parentFolder / subfolder': Permiso denegado
Diagnóstico:
1> ¡Fui a la subcarpeta y está allí y no pude eliminarla!
2> Utilice "explorador de procesos" -> Buscar -> Buscar identificadores y Dlls -> coloque el nombre de "subcarpeta" allí y busque.
Resultado: Resulta que XMLSpy ha abierto uno de los xml allí, cierra XML Spy e intenta stash pop nuevamente, está funcionando ahora.
fuente
Me pasó en Windows mientras rebase dentro del terminal integrado IntelliJ . Me di cuenta de que tenía Git bash instancia de cliente ejecutándose en paralelo.
Cerrar Git bash resolvió el problema.
fuente
Mi encuentro con este problema fue causado por mi editor, Intellij. Como parte de sus controles internos de versión, había revisado y bloqueado todos los archivos git ocultos. (Por varias razones, no estaba usando el complemento git que viene con Intellij ...)
Entonces abrí una ventana normal de DOS como Administrador, cambié al directorio y ejecuté
Eso eliminó el bloqueo en los archivos y todo funcionó después de eso y pude sincronizar mis cambios usando el cliente de Windows GitHub.
fuente
Estoy de acuerdo con las respuestas anteriores "Cerrar Visual Studio".
Sin embargo, un paso adicional que tuve que hacer incluso después de cerrar Visual Studio fue eliminar manualmente el proceso de Visual Studio "devenv.exe" en el Explorador de tareas. Después de hacer esto, pude volver a ejecutar en gitbash:
y desapareció el error " no se puede generar el nombre del archivo ". Quizás se deba a una extensión de Visual Studio que mantiene el proceso abierto por más tiempo incluso después del cierre.
fuente
Acabo de tener este problema. La cuestión es que si había abierto el archivo, que se eliminó \ reemplazó después de un rebase (tenía una rama que ya no tiene este archivo), el sistema git se corrompe. Así que cerré todos los archivos abiertos y luego intenté pagar en alguna otra rama
fuente
Una solución alternativa en lugar de cerrar todas las aplicaciones que podrían estar bloqueando el directorio, como dice casi cualquier otra respuesta, sería usar una utilidad que desbloqueará los archivos / directorio sin cerrar todo. (Odio tener que reiniciar Visual Studio)
LockHunter es el que uso: https://lockhunter.com/ Probablemente también haya otros, pero este me ha funcionado muy bien.
fuente
Mismo problema en Windows 10 64 Bit, ejecutando Git Bash versión 2.9.0.windows1 Usando Atom como mi editor.
Esto funcionó para mí: agregué la carpeta del software Git (para mí, esto era C: \ Archivos de programa \ Git) a las exclusiones para Windows Defender.
Después de que se agregó la exclusión,
git checkout 'file'
funcionó bien.fuente
Este error también puede ser causado por el hecho de que los archivos todavía están "bloqueados" debido a acciones anteriores de git. Tiene que ver con cómo funciona la capa del sistema de archivos de Windows. Una vez leí una buena explicación sobre esto, pero no recuerdo dónde.
Sin embargo, en ese caso, dado que es básicamente una condición de carrera, todo lo que tiene que hacer es continuar con su proceso de rebase interrumpido . Desafortunadamente, esto me sucede todo el tiempo, así que escribí este pequeño ayudante peligroso para mantener mis rebases:
Si desea estar más seguro, puede
git rebase --edit-todo
verificar si la próxima confirmación que se aplicará es realmente la que no se aplicó antes. Úselogit clean -dn
para asegurarse de no eliminar ningún archivo importante.fuente
Me pasó cuando estaba en Windows, cuando usaba Photoshop: cuando guardé una imagen y luego cambié a una rama (dejando Photoshop con la imagen abierta) recibí el error git. Cierre la imagen en Photoshop y vuelva a intentar
fuente
Si tiene abierta la herramienta de fusión Meld, ciérrela . Bloquea la sobrescritura de archivos.
fuente
Matar el proceso w3wp.exe relacionado con el repositorio me arregló esto.
fuente
En mi caso, tenía un servidor de desarrollo webpack ejecutándose detrás.
fuente
Recibí este error cuando mi VS1013 estaba en una sucursal destinada a 8.1 y estaba tratando de pagar una sucursal de 8.0. Necesitaba volver a VS y permitir que se actualizara todo. Entonces podría pagar la rama 8.0 sin error.
fuente
También estaba en una máquina con Windows usando Git Shell cuando encontré el mismo error.
Sin embargo, en ese momento tenía múltiples terminales Git abiertas.
El primer terminal recibió el error que publicó anteriormente y el otro terminal había ejecutado previamente el
grunt serve
comando de terminal de yeoman (vinculado a continuación). El segundo terminal necesitaba permanecer abierto para alojar una instancia de servidor local.Cerrar todas las ventanas de terminal que ejecutan procesos en curso puede hacer que el error desaparezca.
Al menos eso fue lo que funcionó para mí. Después de cerrar la segunda ventana de terminal, pude ver fácilmente diferentes ramas y manipular archivos.
Comando Grunt Serve - Yeoman.I / O
http://yeoman.io/learning/
fuente
Acabo de encontrarme con este problema. Ninguna de las respuestas aquí me resolvió esto.
Terminé siendo paquetes nuget que agregué en una rama que, una vez que volví a la rama maestra, parecía no existir. Una vez que hice una fusión, diría que newtonsoft ... xml no podía stat. Iría al archivo en cuestión y lo abriría, pero Windows arrojó un error diciendo que no puede encontrar el archivo (aunque lo estaba mirando directamente)
Lo que resolví fue hacer clic con el botón derecho en eliminar el archivo (que funcionó pero no pude abrirlo porque Windows no pudo encontrarlo) e intenté fusionarlo nuevamente y resolvió el problema.
Muy extraño.
Espero que esto ayude a alguien más tarde.
fuente
Salí de mi editor de texto que estaba accediendo a los directorios del proyecto, luego intenté fusionarme con la rama maestra y funcionó.
fuente