Git fusiona marcas HEAD izquierdas en mis archivos

6 minutos de lectura

Git fusiona marcas HEAD izquierdas en mis archivos
clave inferior

Traté de fusionar un archivo en la línea de comando usando Git, cuando apareció un mensaje de error que me decía que la fusión se canceló.

Pensé que era el final, pero luego me di cuenta de que hay gitmarks en mis archivos. Al igual que:

start =
    expression

validchar = 
    [0-9a-zA-Z_?!+\[email protected]#$%^&*/.]

integer = 
<<<<<<< HEAD
    digits:[0-9]+
        { return digits.join(""); }
=======
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
>>>>>>> gh-pages

Los archivos no han sido editados por mí y muestran líneas insertadas con:

  • HEAD después de menos que signos (<<<<<<< HEAD)
  • líneas de código modificado
  • una cadena de signos iguales (=======)
  • la nueva versión del código
  • otra línea que comienza con los signos mayor que y el nombre de la sucursal (>>>>>>> gh-pages)

Lo peor es que el contenido del archivo ya no está en orden. ¿Alguien sabe cómo hago para que esos archivos vuelvan a la normalidad y los cambios que hice en la rama gh se fusionaron con la rama maestra?

  • Si realmente no quería fusionar nada (o pensó que no sería necesario), aterrizó aquí y está volviendo loco por los consejos para “editar a mano esas partes” en docenas de archivos, git merge --abort revirtió mi carpeta local a su estado anterior. git status me sugirió eso. Si realmente quieres editarlos, git mergetool (como en la respuesta más abajo) es probablemente lo suficientemente bueno.

    – FonsMA

    5 de enero de 2021 a las 0:20

1647016568 375 Git fusiona marcas HEAD izquierdas en mis archivos
Ámbar

Esos son marcadores de conflicto. Todavía estás en el proceso de fusión, pero hubo algunas partes que Git no pudo fusionar automáticamente. lo harás necesito editar a mano esas partes a lo que usted quiere que sean y luego confirme los resultados.


Por ejemplo, en su caso particular, probablemente desee resolverlo de esta manera (nota: las flechas/texto a la derecha son solo mis notas, no algo que escribiría en el archivo):

integer = 
<<<<<<< HEAD                                  <-+ remove the bits here
    digits:[0-9]+                               |
        { return digits.join(""); }             |
=======                                       <-+
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
>>>>>>> gh-pages                              <-- and this

y así guardarías el archivo como…

integer = 
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }

  • @lowerkey Exactamente cómo desea que se vea el resultado combinado final. Mi suposición es que realmente solo quieres la porción en el gh-pages versión, por lo que simplemente eliminaría las cosas de <<<<<< para ====== y tambien quitar el single >>>>>> línea, dejando las dos líneas de código real entre ======= y >>>>>>.

    – Ámbar

    18 mayo 2012 a las 17:51

  • Gracias, creo que me estoy poniendo al día. Elimine todo, desde la cabeza hasta ====== y luego elimine las marcas HEAD sobrantes.

    – clave inferior

    18 mayo 2012 a las 17:56

  • Sí, eso es correcto. (No hay un “descanso” real del que ocuparse: solo está confirmando los resultados de la fusión, lo que Git normalmente haría automáticamente si no hubiera conflictos).

    – Ámbar

    18 mayo 2012 a las 18:09

  • @lowerkey, por favor considere también leyendo un libro en el tema. Recomendaría leer ese libro en su totalidad, ya que parece que carece de ciertos conocimientos básicos sobre cómo funcionan los VCS y es mejor prepararse para posibles problemas en el futuro.

    – kostix

    19 mayo 2012 a las 16:51


  • Qué divertido es eso. Señala una respuesta de la pregunta que se marca como un duplicado de esta, aunque la respuesta a esta pregunta se puede encontrar en la otra pregunta.

    – t3chb0t

    23 de diciembre de 2017 a las 10:53

1647016569 474 Git fusiona marcas HEAD izquierdas en mis archivos
GoZoner

Absolutamente comience con ‘estado de git’ para ver lo que tiene. Si abortó una fusión (o se abortó una fusión) y tiene archivos en conflicto en el directorio de trabajo, entonces algo salió mal. El estado de Git te dirá dónde estás. Después de eso, tienes varias opciones. Debe resolver la confirmación de fusión a mano, lo que puede ser un desafío, o usar una herramienta como:

git mergetool

La herramienta de combinación funcionará si sus archivos aparecen como que necesitan una combinación.

También puede realizar uno de:

git checkout --ours -- /path/to/conflicted-file       # this is probably the one you want
git checkout --theirs -- /path/to/conflicted-file

Puede ver las diferentes versiones usando la sintaxis :1:filename. Ver aquí para una explicación. Pero todo lo anterior supone que el ‘estado de git’ muestra que los archivos necesitan una fusión.

Por último, siempre tienes la opción de:

git reset --hard   # sounds like --hard is what you need but check other options

  • Absolutamente me gustaría secundar el “comenzar con git status para ver lo que tienes” consejo: en algunos círculos está de moda culpar a Git por su complejidad imaginaria, pero de hecho lee con cuidado la salida de git status es suficiente para entender qué hacer a continuación en las situaciones más comunes. Por lo tanto, realmente: si algo sale mal, deténgase, lea git statuspensar.

    – kostix

    19 mayo 2012 a las 16:54


Git fusiona marcas HEAD izquierdas en mis archivos
Sr. Pundir

Todas las respuestas son correctas, pero si desea eliminar automáticamente todas las marcas de conflicto y desea cambiar automáticamente los archivos para mantener HEAD, entonces puede crear su propio script bash como: –

Guión de ejemplo:

# vim /usr/sbin/solve.git

(Anexar siguiente)

#!/bin/bash
for f in $(grep -Rl '^>>>>>>> ' --include="*.php" --include="*.css" --include="*.js" --include="*.html" --include="*.svg" --include="*.txt" .)
do
sed -i -e '/^=======/,/^>>>>>>> /d' -e '/^<<<<<<< /d' $f
sed -i -e '/^>>>>>>> /d' $f
echo "$f Fixed"
done
git add . ; git commit -am "[+] Resolved on `date` from `hostname` by `whoami`" --no-verify

# chmod 755 /usr/sbin/solve.git

& simplemente ejecútelo en su repositorio/ruta GIT para resolver:

$ cd <path_to_repo>
$ solve.git

Aviso: – Las extensiones de archivo mencionadas anteriormente son php, css, js, html, svg y txt.

  • asco Simplemente pague por una herramienta de diferencias adecuada que maneje los conflictos de fusión de manera inteligente.

    – C. Johnson

    13 de julio de 2021 a las 16:31

Vengo de esta pregunta. Y quería algún método automatizado para fusionar los archivos medio fusionados, en lugar de editar manualmente los archivos (como se sugiere en otras respuestas, que no me siento muy cómodo haciendo). Entonces, esto es lo que terminé haciendo a través de netbeans, pero también se puede hacer a través de la línea de comandos.

Ahora, tenga en cuenta que esto solo funciona si inmediatamente después de la merge->add->committe diste cuenta de que te equivocaste y quieres volver a pasar por el proceso.

PASO 1: Restablecer a una confirmación anterior.

git reset --hard a992a93f9312c6fa07c3a1b471c85e9fbf767d0e

PASO 2: Vuelva a intentar fusionar la rama

git merge --ff origin/feature/YOUR-Branch_here

En este punto, aparecerá la ventana de combinación si está utilizando una GUI. y luego puede proceder normalmente.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad