2011-01-25 6 views
5

¿Hay una abreviatura para identificar el último compromiso común a dos ramas? Por ejemplo si tengo maestro y luego tema1 se separa del maestro, y ambos continuarángit identificar la intersección más reciente de dos ramas

 
master: 
a------b------c------d 
     \ 
topic1: r------s------t 

¿Hay una manera de identificar decir b?
Por ejemplo, si existiera algo como master # topic1 (igual que topic1 # master) que significa, "la confirmación más reciente compartida por el maestro y el tema".

Me gustaría ser capaz de:

$ git checkout topic1 
$ git diff master#topic1..topic1

sé que puedo hacer:

git diff master..topic

pero no me importa compromete c y d.

Respuesta

7

La respuesta a la pregunta que en realidad estás preguntando:

git diff master...topic 

Nota los tres puntos.

Desde la página de manual:

git diff [--options] <commit>...<commit> [--] [<path>...]

Esta forma es para ver los cambios en la rama que contiene y hasta el segundo, a partir de un ancestro común de ambos <commit>. git diff A...B es equivalente a git diff $(git merge-base A B) B. Puede omitir cualquiera de <commit>, que tiene el mismo efecto que usar HEAD.

5

use git merge-base.

NAME 
git-merge-base - Find as good common ancestors as possible for a merge 

SYNOPSIS 
git merge-base [-a|--all] [--octopus] <commit> <commit>… 
git merge-base --independent <commit>… 
+0

cool thx! Desearía que hubiera una forma abreviada de expresar eso. – jpswain

+1

@orange: ¡Hay, en su caso de uso! Ver mi respuesta – Cascabel