2011-02-04 10 views
11

Para un sitio web, tengo un master y una puesta en escena, he trabajado en escenarios durante aproximadamente 10 días. ¿Cómo puedo decir con certeza qué ha cambiado desde mi última fusión, o cuándo fue esa fusión? La mayoría de las fusiones que he hecho terminan siendo FF, así que no puedo registrarlas como git merge branch -m 'merging staging' (git informa que ignoró -m). Por lo general, fusiono master en etapas para probar antes de combinar etapas en master para realizar más pruebas e implementarlas.¿Cómo encontrar la última fusión en git?

Podría etiquetar cada una pero me preocupa el desorden de hacer eso para las fusiones. Lo que me gustaría saber es "aproximadamente, ¿qué cambió desde mi última fusión de puesta en escena en el maestro?" Entonces podría asegurarme de que dedique más tiempo a investigar esos cambios en el examen final. A veces, los compañeros de trabajo hacen cambios que no había notado hasta esta etapa.

Supongo que dado que las combinaciones de etapas en> master son raras, podría etiquetarlas y luego hacer una "etiqueta de git whatchanged", pero espero que haya una forma de no etiquetar para hacerlo. Gracias.

+1

Es por eso que siempre evito fusiones rápidas ... – CharlesB

+0

@CharlesB: ¿Cómo puedo evitarlos? Si estoy en una puesta en escena, ¿evito fusionar el master en él y solo fusionarlo en master? – Hans

+0

@CharlesB: ah, ya veo, --no-ff? Tendré que intentarlo ... – Hans

Respuesta

12

Prueba de esto, se seleccionará la última rama donde el mensaje de consignación comienza con "Combinar":

git show :/^Merge 

Here 's un sitio web con algunos consejos git que podrían serle de ayuda.

+0

@alex, gracias por la respuesta. Por alguna razón, si estoy en una rama no principal y yo "fusiono el maestro" en ella, registra un mensaje de confirmación, pero si estoy en maestro y fusiono esa rama (por ejemplo, en etapas), no lo hace porque es un avance rápido. – Hans

+18

Creo que lo que realmente quieres hacer es 'git log --merges -n 1'. En realidad, no hay garantía de que una confirmación de fusión tenga un mensaje de confirmación de este formulario, aunque sea el predeterminado. – Cascabel

+0

Eso es increíble. No sé cómo me lo perdí, mirando durante horas, pero eso es lo que quería. Por cierto, no puedo decir, ¿muestra las fusiones? Quiero saber cuándo me fusioné, por lo que usar --no-ff en master probablemente sea bueno, ¿verdad? – Hans

1

Parece que esta es mi mejor apuesta:

edité ~/.gitconfig, añadiendo:

[branch "master"] 
    mergeoptions = --no-ff 

Entonces si estoy en amo y yo se funden en una rama, se muestra como una fusión completa. Tener eso como una opción de configuración para solo "master" muestra cuán asombroso es Git, así que aún puedo fusionar FF dentro de las sucursales, donde es probable que tenga muchas ramas temáticas de corta vida, y no tengo que recordar para especificar --no-ff cuando se combina en el maestro. Hermosa.

Puedo utilizar este alias para los registros de visualización:

k = log --graph --pretty = formato: '% Cred% h% Creset -% C (amarillo)% d% Creset% s% Cgreen (% Cr, Cd%)% C (azul negrita) <% an>% Creset' --abbrev-comprometen

> git k (similar to the gui gitk, but stays in the terminal) 

Cuando veo los registros de esa manera, se pinta una imagen agradable de la ramificación. Si quiero encontrar el último, puedo hacer

> git show :/"Merge branch 'staging'" 

Gracias por la ayuda.

EDIT: Como @ Jefromi se señala en los comentarios a la primera respuesta, esto es probablemente una mejor técnica git log --merges -n 1

1

Parece que realmente no quiere saber lo que ha cambiado desde la última combinación de, pero ¿Qué tengo yo en la rama organización que aún no está en la rama maestro? (o al revés). Si es así, mira el comando git cherry.

Aunque debo confesar que nunca utilicé este comando debido al formato de salida, que no es realmente útil. Tal vez hay una forma de enviar esta salida a git log/git show o tal.


Editar: Según tengo entendido, no es necesario utilizar una etiqueta para git whatchanged. Intente simplemente git whatchanged master..staging para ver qué cambió en la etapa desde la última fusión de la transición al máster.

+0

ŭlo - esa es otra buena idea. Para esta pregunta, el hecho de no permitir fusiones FF en el maestro y usar un buen formato de salida de registro me ayuda principalmente, como lo hace el truco 'git show: /" Merge "', pero también he estado usando 'git log master..staging' que parece similar a 'git whatchanged master ... stage' – Hans

4

Una alternativa que no se basa en el contenido del mensaje de entrega:

$ git rev-list --min-parents=2 --max-count=1 HEAD 
9c6e6d6b6b9bd293335700e34e05217ae8e7a7e8 

--min-parents=2 Buscamos solamente compromete que son fusiones, --max-count=1 sólo se muestra el primer compromiso al que se remonta en la historia. Si la confirmación especificada (HEAD) no tiene ninguna confirmación de fusión en su historial, la salida estará vacía.

0

¿Por qué no simplemente difiere su rama de etapas contra el maestro? Eso le mostrará las diferencias reales en cada uno de sus archivos, y no solo esas cosas no fusionadas. También cosas que puede haber eliminado al pasar de la etapa a la maestría en el pasado.

prueba git diff master..staging o git diff master...staging para ver la diferencia de su antecesor común a 'puesta en escena'.

0
git log --merges -n 1 

funciona bien. De man git-log:

--merges 
     Print only merge commits. This is exactly the same as --min-parents=2. 

Aquí hay un ejemplo usando --pretty=format:"%H" para conseguir el SHA.

$ git log --pretty=format:"%H" --merges -n 1 
f32e1f13eef7d5843e8063b8709d01af6dcd5dbf 

crédito va a Jefromi por su comment on another answer.

Cuestiones relacionadas