¿Cómo construyo un buffer contra una revisión?

8

Quiero ejecutar ediff para comparar mi versión actual de un archivo (en git) con una versión del archivo en una rama diferente.

Corro M-x ediff-revisiondesde un búfer abierto para el archivo en cuestión. Respondo las dos preguntas:

  • Comparar revisiones para el archivo: pongo en blanco esta respuesta (el valor predeterminado es el búfer actual que es correcto).
  • Revisión 1 para comparar: acepto el valor predeterminado nuevamente ("última versión del archivo predeterminado").
  • Revisión 2 para comparar: ingreso un nombre de sucursal git

Esto funciona muy bien para ver las diferencias entre los dos archivos. Sin embargo, quiero poder editar la versión actual (es decir, presionando ao ben ediff para copiar o eliminar bloques de diff) y el búfer de "versión actual" es un búfer de solo lectura con un nombre fabricado ( file.~git-branch~). Quiero que el búfer de "versión actual" sea el búfer de lectura-escritura con el que empecé, no un búfer de solo lectura en la versión actual de la rama.

PT
fuente

Respuestas:

7

Emacs está haciendo lo que le dijiste que hiciera en lugar de lo que querías decir. ediff-revisionpide tres datos:

  1. El archivo para trabajar: predeterminado: el archivo que está visitando el búfer actual.
  2. La revisión anterior: predeterminada: la última revisión.
  3. La nueva revisión: predeterminada: el estado actual.

En el paso 1, selecciona el archivo, no le está diciendo a Emacs que desea usar el archivo como está en el búfer. El valor predeterminado para el paso 2 es la última revisión, no la copia de trabajo actual. El valor predeterminado para el paso 3 es el contenido del búfer, que es la copia de trabajo si el búfer no se modifica. Con lo que hizo, está comparando lo que ha verificado (generalmente la última revisión de la rama actual) con alguna otra rama, no la copia de trabajo con otra rama.

Debe dar el nombre de la rama como la primera revisión (paso 2) y dejar la tercera pregunta en blanco para decir que desea usar el estado del búfer. Solo puede seleccionar el estado actual del búfer para la revisión 2, no para la revisión 1 (esto está integrado ediff-vc-internal).

Gilles 'SO- deja de ser malvado'
fuente
7

Cuando se usa magit :

  1. Úselo l -al lpara ver las revisiones de todas las ramas en su historial
  2. vaya a la línea que contiene la revisión con la que desea comparar su contenido actual de búfer.
  3. Escriba dy se le preguntará con qué revisión comparar el árbol de trabajo actual (el valor predeterminado es la revisión en el punto). Confirmar.
  4. Obtendrá una descripción general de los cambios de todas las diferencias de archivos entre el árbol de trabajo actual y la revisión. Ponga el punto en el archivo que le interesa y epresione para invocar una sesión de ediff en él.

Magit ofrece una serie de opciones para mostrar las revisiones (paso 1). Puede elegir Si tiene una estructura de rama muy compleja, es posible que desee utilizar un poco más de filtrado para encontrar la revisión deseada.

dfeich
fuente
¡Excelente! Esto es exactamente lo que estaba buscando. Solo una cosa ... ¿Qué quieres decir con -al? Normalmente lo hago l lo l aen el búfer magit-status.
nephewtom
Esto fue para un diseño de interfaz de usuario anterior de magit. En las versiones actuales puedes usar l a. El diseño de Magit cambió varias veces en los últimos 3 años.
dfeich