tag practices from example delete create crear best git conflict git-merge

practices - git tag push



¿Cómo puedo saber qué cometidos de Git causan conflictos? (3)

Estoy fusionando los cambios anteriores a mi proyecto, y recientemente hubo muchos compromisos que crearon muchos conflictos de combinación. No tiene sentido tratar de resolverlos todos a la vez.

¿Cómo puedo saber qué compromisos crean un conflicto? Cualquiera de los siguientes son aceptables:

  • Una forma de hacer que Git deje de fusionarse tan pronto como encuentre un conflicto.
  • Una forma de hacer que Git haga una lista de todas las confirmaciones en conflicto, en orden cronológico.
  • Cualquier otra cosa que me permita resolver los conflictos uno por uno, en orden cronológico, que no implique la combinación de algunos compromisos a la vez con la esperanza de encontrar los conflictos.

¿Hay alguna razón por la que no querría usar rebase (de forma no interactiva) para sincronizar con los cambios en la rama ascendente? Se detendrá si hay un conflicto en cada confirmación, y luego puede reanudar la rebase cuando se resuelva. Es como una fusión incremental, y está integrada en Git, no hay necesidad de un complemento / herramienta externa:

git fetch <remote> git rebase <remote>/<upstream-branch> # Conflict on commit X, resolve conflict, then continue the rebase git rebase --continue

Advertencia sobre la fuerza de empuje reescrito confirmaciones

Tenga en cuenta, por supuesto, que volver a basar su sucursal local cambiará los ID de sha de sus confirmaciones. Si ya ha presionado las confirmaciones que desea cambiar a su control remoto, entonces deberá forzar las nuevas confirmaciones para sobrescribir las antiguas, lo que podría plantear un problema potencial si está compartiendo su sucursal con otras personas. . Puede aprender más sobre estos problemas en:


Michael Haggerty también tiene una herramienta llamada git-mergemate que tiene un comando de find-conflict :

git-mergemate find-conflict BRANCH1..BRANCH2

Use la bisección para determinar el primer compromiso en BRANCH2 que causa un conflicto cuando se fusiona con BRANCH1 . En realidad no retener ninguna fusión.

git-mergemate find-conflict BRANCH1...BRANCH2

Use la bisección para encontrar un par de confirmaciones más tempranas (una de cada rama) que no se fusionen limpiamente. En realidad no retener ninguna fusión.

git imerge se puede usar para hacer una fusión incremental y resolver conflictos en el camino, aunque no tiene el equivalente de find-conflicts en git-mergemate .