2011-01-25 17 views
5

Esiste una scorciatoia per identificare l'ultimo commit comune a due rami? Per esempio se ho master e quindi ambito1 si separa da maestro, ed entrambi continuanogit identifica l'intersezione più recente di due rami

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

C'è un modo per identificare dire b?
Ad esempio se esisteva qualcosa come master # topic1 (uguale a topic1 # master) che significava "il commit più recente condiviso sia dal master che dall'argomento".

mi piacerebbe essere in grado di:

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

so che posso fare:

git diff master..topic

ma non mi preoccupo impegna c e d.

risposta

7

La risposta alla domanda si sta effettivamente chiedendo:

git diff master...topic 

Nota i tre punti.

Dalla manpage:

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

Questo modulo è per visualizzare le modifiche sul ramo contenente e fino al secondo, a partire da un antenato comune sia <commit>. git diff A...B equivale a git diff $(git merge-base A B) B. Puoi omettere uno qualsiasi di <commit>, che ha lo stesso effetto dell'uso di HEAD.

5

utilizzare 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! Vorrei che ci fosse una scorciatoia per esprimerlo. – jpswain

+1

@orange: c'è, nel tuo caso d'uso! Vedi la mia risposta. – Cascabel