Hice algunas actualizaciones en mi máquina local, las envié a un repositorio remoto, y ahora estoy tratando de obtener los cambios en el servidor y recibo el mensaje;
error: sus cambios locales en los siguientes archivos se sobrescribirán mediante fusión:
wp-content / w3tc-config / master.php
Por favor, confirme sus cambios o guárdelos antes de poder fusionarse.
Entonces corrí
git checkout -- wp-content/w3tc-config/master.php
e intenté de nuevo y recibí el mismo mensaje. Supongo que eso w3tc
cambió algo en el archivo de configuración en el servidor. No me importa si la copia local o la copia remota van al servidor (supongo que la remota es la mejor), solo quiero poder fusionar el resto de mis cambios (actualizaciones de complementos).
¿Algunas ideas?
Respuestas:
No puede fusionarse con modificaciones locales. Git te protege de perder cambios potencialmente importantes.
Tienes tres opciones:
Cometer el cambio usando
Guárdalo.
El alijo actúa como una pila, donde puede empujar los cambios, y los revienta en orden inverso.
Para esconder, escriba
Haz la fusión y luego saca el alijo:
Descartar los cambios locales.
usando
git reset --hard
o
git checkout -t -f remote/branch
O bien: descarte los cambios locales para un archivo específico
utilizando
git checkout filename
fuente
git reset --hard
, también puede eliminar archivos no rastreados congit clean -dfx
git stash
, no guardará archivos para los que no hay historial. Por lo tanto, si tiene archivos que aún no ha agregado pero que se sobrescribirán o "crearán" con la fusión, la fusión seguirá bloqueándose. En esa situación, también puede usargit stash -u
para guardar archivos no confirmados. ¡O simplemente puedes eliminarlos!git clean -dfx
era una idea terrible. Eliminé algunos archivos .gitignored que realmente necesitaba.git reset --hard
, todavía tenía cambios no fusionados!El primer comando almacena sus cambios temporalmente en el alijo y los elimina del directorio de trabajo.
El segundo comando cambia de rama.
El tercer comando restaura los cambios que ha almacenado en el escondite (la
--index
opción es útil para asegurarse de que los archivos almacenados sigan almacenados).fuente
git stash pop
lugar degit stash apply
. El primero lo retira del escondite mientras que el segundo todavía lo mantiene allíPuede probar uno de los siguientes métodos:
rebase
Para cambios simples, intente rebasar encima mientras tira de los cambios, por ej.
Por lo tanto, aplicará su rama actual en la parte superior de la rama aguas arriba después de buscar.
Esto es equivalente a:
checkout master
,fetch
yrebase origin/master
los comandos de Git.revisa
Si no le importan sus cambios locales, puede cambiar a otra rama temporal (con fuerza) y volver a cambiarla, p. Ej.
Reiniciar
Si no le importan sus cambios locales, intente restablecerlo a HEAD (estado original), p. Ej.
Si lo anterior no ayuda, puede haber reglas en su archivo de normalización de git (
.gitattributes
), por lo que es mejor confirmar lo que dice. O su sistema de archivos no admite permisos, por lo que debe deshabilitarfilemode
su configuración de git.Relacionado: ¿Cómo fuerzo "git pull" para sobrescribir los archivos locales?
fuente
git status
qué cambios tiene después de guardarlos. Si ninguna respuesta ayuda, considere agregar una nueva pregunta.Prueba esto
e intenta tirar de nuevo
fuente
git stash -u
, como se comentó en stackoverflow.com/questions/15745045/…Entonces, la situación con la que me encontré fue la siguiente:
excepto, justo antes de eso, era remoto: así que en realidad esto
Lo que estaba sucediendo era (creo que no era 100% positivo) que el gancho de recepción de git post comenzaba a ejecutarse y se arruinaba debido a cambios de movimiento en el repositorio del servidor remoto, que en teoría no debería haberse tocado.
Entonces, lo que terminé haciendo al rastrear el gancho posterior a la recepción y encontrar esto, fue tener que ir al repositorio remoto en el servidor, y hubo un cambio (que no estaba en mi repositorio local, que, de hecho, dijo que coincidía, no había cambios, no había nada que confirmar, estaba actualizado, etc.) Entonces, mientras estaba en el local, no hubo cambios, en el servidor, luego hice un
git checkout -- some/file.ext
y luego los repositorios locales y remotos realmente coincidieron y pude continuar trabajando y desplegar. No estoy completamente seguro de cómo ocurrió esta situación, aunque un par de docenas de desarrolladores más los cambios de TI pueden tener algo que ver con eso.fuente
ADVERTENCIA: Esto eliminará los archivos no rastreados, por lo que no es una gran respuesta a esta pregunta.
En mi caso, no quería conservar los archivos, así que esto funcionó para mí:
Git 2.11 y más reciente:
Git mayor:
Referencia: http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x significa que también se eliminan los archivos ignorados, así como los archivos desconocidos para git.
-d significa eliminar directorios no rastreados además de archivos no rastreados.
-f es requerido para forzarlo a correr.
fuente
Para mantener un registro de sus archivos recién creados mientras resuelve este problema:
Si ha creado archivos recientemente , puede crear un parche de cambios locales, incorporar fusiones remotas y aplicar su parche local después de que se complete la fusión remota como se define paso a paso a continuación:
git add .
git diff --cached > mypatch.patch
git reset --hard
git pull
git apply mypatch.patch
Git fusionará los cambios y creará archivos .rej para los cambios que no se fusionan.
Según lo sugerido por Anu, si tiene problemas para aplicar el parche, intente:
git apply --reject --whitespace=fix mypatch.patch
Esta respuesta git: parche no aplica charlas en detalle sobre este temaDisfrute de su trabajo continuo en su función y confirme los cambios locales cuando termine.
fuente
error: patch failed: yourfile.py:33 error: yourfile.py: patch does not apply
Apliqué el parche de nuevo -> Recibí un error: todavía tengo mypatch.patch, pero no sé por qué no se está aplicando y perdí mis cambios. !git apply --reject --whitespace=fix mypatch.patch
, ¡recuperé mis cambios! [Gracias a] ( stackoverflow.com/a/15375869/6484358 )Pedir compromiso antes de tirar
Si es necesario :
fuente
Para mí solo
git reset --hard
funcionó.Comprometerse no era una opción, ya que no había nada que comprometerse.
El escondite no era una opción porque no había nada que esconder.
Parece que podría haber sido de archivos excluidos
.git/info/exclude
y habergit update-index --assume-unchanged <file>
editado algunos archivos.fuente
En mi caso, hice una copia de seguridad y luego eliminé el archivo del que Git se quejaba, lo comprometí, y finalmente pude verificar otra rama.
Luego reemplacé el archivo, volví a copiar el contenido y continué como si nada hubiera pasado.
fuente
Probablemente esto se deba a problemas de CRLF.
Ver: ¿Por qué debería usar core.autocrlf = true en Git?
Use esto para extraer y forzar la actualización:
fuente
Intenté la primera respuesta:
git stash
con la puntuación más alta pero el mensaje de error seguía apareciendo, y luego encontré este artículo para confirmar los cambios en lugar de esconder 'Compromiso renuente'y el mensaje de error desapareció finalmente:
1:
git add .
2:
git commit -m "this is an additional commit"
3:
git checkout the-other-file-name
entonces funcionó. Espero que esta respuesta ayude. :)
fuente
Si está utilizando Git Extensions , debería poder encontrar sus cambios locales en el
Working directory
siguiente:Si no ve ningún cambio, probablemente sea porque está en un submódulo incorrecto. Así que verifique todos los artículos con un icono de submarino como se muestra a continuación:
Cuando encuentre algún cambio no comprometido:
Seleccione la línea con
Working directory
, vaya a Dif pestaña, haga clic en el botón derecho en filas con un lápiz (o+
o-
icono), seleccione Restablecer para cometer primera o cometer o escondite o lo que usted quiere hacer con ella.fuente
Para mí esto funcionó:
git reset --hard
y entonces
git pull origin <*current branch>
después de esto
git checkout <*branch>
fuente
Probablemente
ayudaría
fuente