Pregunta

Intenté fusionar un archivo en la línea de comando usando Git, cuando apareció un mensaje de error que me indicaba que la fusión había sido cancelada.

Pensé que ese 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_?!+\-=@#$%^&*/.]

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 signos de menos que (<<<<<<< HEAD)
  • líneas de código cambiado
  • una cadena de signos iguales (=======)
  • la nueva versión del código
  • otra línea que comienza con signos de 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 puedo hacer para que esos archivos vuelvan a la normalidad y los cambios que hice en la rama gh se fusionen con la rama maestra?

¿Fue útil?

Solución

Esos son marcadores de conflicto .Todavía estás en proceso de fusión, pero hubo algunas partes que Git no podían fusionarse automáticamente.Usted, necesidad de editar a mano esas partes aLo que quieres que estén y luego cometan los resultados.


Por ejemplo, en su caso particular, es probable que quiera resolverlo así (Nota: las flechas / texto a la derecha son solo mis notas, no es 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, por lo tanto, guardarías el archivo como ...

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

Otros consejos

Comience absolutamente con 'estado de git' para ver lo que tiene.Si abortó una fusión (o ha abortado una fusión) y usted tiene archivos en conflicto en el directorio de trabajo, entonces algo salió mal.El estado del git le dirá dónde estás.Después de eso, tienes una serie de opciones.Debe resolver el compromiso de combinación, ya sea a mano, lo que puede ser desafiante, o usar una herramienta como:

git mergetool

La herramienta de combinación funcionará si sus archivos se enumeran como necesitando una fusió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 el: 1: Sintaxis de nombre de archivo.Consulte aquí para una explicación.Pero todo lo anterior asume que el 'estado de git' muestra los archivos que necesitan una fusión.

Finalmente, siempre tiene la opción de:

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

Todas las respuestas son correctas, pero si desea ejecutar automáticamente todas las marcas de conflicto y desea automáticamente los archivos para mantener la cabeza, puede crear su propio script de bash como: -

Script 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

y solo ejecutelo en su git repo / ruta para resolver:

$ cd <path_to_repo>
$ solve.git

AVISO: - Las extensiones de archivo mencionadas anteriormente son PHP, CSS, JS, HTML, SVG & TXT.

En Atom, tuve el problema de que algunos archivos no salvaron los conflictos de fusión resueltos en la unidad, así que tuve que hacer clic manualmente "Guardar". Me tomó bastante tiempo para averiguar.

vengo de esta pregunta.Y quería algún método automatizado para fusionar los archivos medio fusionados, en lugar de editarlos manualmente (como se sugiere en otras respuestas, lo cual no me siento realmente cómodo haciendo).Así que 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 sólo funciona si inmediatamente después del merge->add->commit, te diste cuenta de que cometiste un error y quieres volver a realizar 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, se le mostrará la ventana de fusión si está utilizando una GUI.y luego podrá proceder con normalidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top