¿Cómo lidiar con files modificados localmente al tirar o search?

Tengo un tenedor GitHub de una biblioteca de código abierto. En mi copy local de ese fork he modificado muchos de los CMakeLists.txt incluidos (y otros files) para que no compile toda la biblioteca (ya que hay muchas cosas que no necesito). Por lo tanto, para integrar mis cambios sin problemas, lo hago

git update-index --assume-unchanged <files> 

Entonces eso me permite usar git como si no hubiera cambiado ninguno de esos files. Sin embargo, cada vez que el control remoto tiene cambios e bash extraerlos (o cada vez que quiero crear una nueva twig), aparece el siguiente error:

 error: Your local changes to the following files would be overwritten by merge: CMakeLists.txt demos/CMakeLists.txt <other files> Please, commit your changes or stash them before you can merge. Aborting 

Así que tengo que deshacer todos los cambios de forma manual, y git update-index --no-assume-unchanged <files> , extraer y luego volver a hacer los cambios y update-index . Esto es doloroso, ya que tengo que hacerlo casi a diario.

Lo que quiero aquí es actualizar mis files modificados localmente si tienen algún cambio (en realidad, no es probable que se cambien, por lo que la probabilidad de conflictos es baja), pero para mantener los cambios que hice y mantener git suponiendo que tienen no ha cambiado

¿Hay una mejor manera de hacer esto?

EDITAR: perdón si esto ya se ha preguntado. Lo estaba buscando pero no pude encontrar una respuesta para mi caso específico. ¡Gracias!

Hay este command realmente oscuro que necesitas usar – git commit 😉

En serio, solo comprométalo y deja que pull + rebase / merge se encargue de todo.

Imagina que tienes 2 commits antes de tu upstream como este

Upstream <- Trabajo que desea presionar <- Cambia a CMakeLists.txt

git reset HEAD~1 – "comprometerá" su confirmación más reciente, de modo que pueda presionar solo su primer commit.

Alternativamente

git push HEAD~1:UPSTREAM – logrará lo mismo pero dejará su trabajo comprometido.

O podrías decir git branch PUSH_ME HEAD~1 y luego git push PUSH_ME:UPSTREAM

Aquí hay un sinfín de opciones. Lo único que tiene que hacer es hacer que sus cambios se confirmen mientras trabaja para que pueda extraer / fusionar las cosas correctamente.

Si los files no están incluidos en el repository, debe includelos en .gitignore lugar de aplicar el --assume-unchanged . Es ese el caso?

Estoy respondiendo a esta pregunta, ya que será más clara.

Primero, hice todos los cambios que no quería hacer y los cometí, digamos que este compromiso es SHA1. Y luego hizo el rest de los cambios y los comprometió con SHA2.

Ahora, mi repository se ve así: master <- SHA1 <- SHA2 Necesito presionar SHA2 sin presionar SHA1. Si hago `git push origen SHA2: maestro, SHA1 se comprometerá y SHA2 depende de él.

Sin embargo, haciendo git rebase -i muestra lo siguiente:

pick SHA1 comment1 pick SHA2 comment2

Así que cambié el order de esos commits:

pick SHA2 comment2 pick SHA1 comment1

Y ahora SHA2 ya no depende de SHA1. Hacer el git push origin SHA2:master solo empuja los cambios de SHA2.

Finalmente, si ocurren algunos cambios en el flujo ascendente, hacer git pull funcionará sin problemas.