remove - Git merge dejó marcas HEAD en mis archivos
git remove tag (4)
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 había sido cancelada.
Pensé que era el final, pero luego me di cuenta de que había 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:
- CABEZA después de menos 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 signos mayores que y el nombre de la rama (
>>>>>>> gh-pages
)
Lo que es peor es que el contenido del archivo ya no está en orden. ¿Alguien sabe cómo consigo que esos archivos vuelvan a la normalidad, y los cambios que hice en la rama gh se fusionaron en la rama principal?
Absolutamente comienza con el "estado de git" para ver lo que tienes. Si abortó una fusión (o se anuló una combinación) y tiene archivos en conflicto en el directorio de trabajo, algo salió mal. El estado de Git te dirá dónde estás. Después de eso, tienes varias opciones. Debe resolver la combinación de confluencia ya sea de forma manual, lo que puede ser un desafío, o usar una herramienta como:
git mergetool
La herramienta de fusión funcionará si sus archivos se enumeran 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 con la sintaxis de: 1: nombre de archivo. Mira here para una explicación. Pero todo lo anterior supone que el ''estado de git'' muestra que los archivos necesitan una combinación.
Finalmente, siempre tienes la opción de:
git reset --hard # sounds like --hard is what you need but check other options
En Atom tuve el problema de que algunos archivos no guardaban los conflictos de combinación resueltos en la unidad, así que tuve que hacer clic manualmente en "guardar". Me tomó bastante tiempo descubrirlo.
Esos son marcadores de conflicto . Todavía estás en proceso de fusión, pero hubo algunas partes en las que Git no pudo fusionarse automáticamente. Deberá editar manualmente esas partes según lo que desee y luego confirmar los resultados.
Por ejemplo, en tu caso particular, probablemente quieras resolverlo de esta manera (nota: las flechas / texto a la derecha son solo mis notas, no algo que escribirías 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(""); }
Todas las respuestas son correctas, pero si desea Autoremove todas las marcas de conflicto y desea cambiar automáticamente los archivos para mantener HEAD, puede crear su propio script bash como:
Ejemplo de secuencia de comandos:
# vim /usr/sbin/solve.git
(Agregar 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 ejecutarlo en su repo / ruta GIT para resolver:
$ cd <path_to_repo>
$ solve.git
Aviso: las extensiones de archivo mencionadas anteriormente son php, css, js, html, svg & txt.