2012-03-15 17 views
38

C'è un modo per vedere con git log o qualche altro comando solo i commit che sono stati aggiunti dopo la creazione del ramo?mostra commit dalla creazione del ramo

usage: git log [<options>] [<since>..<until>] [[--] <path>...] 
    or: git show [options] <object>... 

    --quiet    suppress diff output 
    --source    show source 
    --decorate[=...]  decorate options 
+1

correlati: [Come ottenere i cambiamenti su un ramo in git] (http://stackoverflow.com/questions/53569/how- to-get-the-changes-on-a-branch-in-git) –

risposta

3

Sì, è possibile confrontare il vostro "nuovo" ramo con ramo principale (comunemente denominata: "master"):

git log master..<your_branch_name> 

Naturalmente, sostituire <your_branch_name>.

+4

Questo mostra solo i commit dall'ultima estrazione dal master, o viceversa, che non è lo stesso che mostrare i commit dal momento in cui il ramo è stato creato. – spiffytech

+0

funziona anche con git diff master..your_branch_name – jspooner

39

Usa tre periodi di riferimento il commit in cui il secondo ramo discostato dalla prima, o in questo caso il vostro ramo discostato da maestro:

git log master...<your_branch_name> 

assicurarsi di utilizzare tre periodi per questo caso.

Side-Note: Si può anche lasciare il vostro nome del ramo come git riferimento automaticamente il puntatore di testa in quel caso, ad esempio:

git log master... 

è equivalente al mio esempio precedente. Questo funziona ovunque sia disponibile un confronto di commit.

+1

Nel mio caso 'git log master..' funziona. – MKatleast3

+1

'git log master ...' NON ha funzionato per me, solo 'git log master..' ha funzionato. Noti i due punti invece di tre – NecipAllef

+0

Contento che ha funzionato per te. Double for è ovviamente la sintassi corretta. Ma attenzione, i punti contano. Vedi la risposta di Alan Thompson per una spiegazione dettagliata della differenza tra la notazione a doppio e triplo punto. –

29

documentazione completa è qui: https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html

Supponiamo di avere un pronti contro termine che assomiglia a questo:

base - A - B - C - D (master) 
       \ 
       \- X - Y - Z (myBranch) 

Verificare lo stato di pronti contro termine:

> git checkout master 
Already on 'master' 
> git status ; git log --oneline 
On branch master 
nothing to commit, working directory clean 
d9addce D 
110a9ab C 
5f3f8db B 
0f26e69 A 
e764ffa base 

e per myBranch:

> git checkout myBranch 
> git status ; git log --oneline 
On branch myBranch 
nothing to commit, working directory clean 
3bc0d40 Z 
917ac8d Y 
3e65f72 X 
5f3f8db B 
0f26e69 A 
e764ffa base 

Supponiamo che tu sia su myBranch e vuoi solo le modifiche SINCE master. Utilizzare la versione a due punti:

> git log --oneline master..myBranch 
3bc0d40 Z 
917ac8d Y 
3e65f72 X 

La versione a tre punti dà tutte le modifiche dalla punta di maestro alla punta di myBranch. Si noti tuttavia che il comune di commit B non è incluso:

> git log --oneline master...myBranch 
d9addce D 
110a9ab C 
3bc0d40 Z 
917ac8d Y 
3e65f72 X 

NOTA BENE: git log e git diff comportarsi in modo diverso! Il comportamento non è esattamente di fronte, ma quasi:

> git diff master..myBranch 
diff --git a/rev.txt b/rev.txt 
index 1784810..e900b1c 100644 
--- a/rev.txt 
+++ b/rev.txt 
@@ -1 +1 @@ 
-D 
+Z 

> git diff master...myBranch 
diff --git a/rev.txt b/rev.txt 
index 223b783..e900b1c 100644 
--- a/rev.txt 
+++ b/rev.txt 
@@ -1 +1 @@ 
-B 
+Z 

Quindi, la versione a due punti indicano il diff dalla punta del master (cioè D) alla punta di myBranch (Z). La versione a tre punti mostra la differenza dalla base di myBranch (ad esempio B) alla punta di myBranch (Z).

+0

Se dovessi fare 'git log --oneline myBranch..master', questo ti darebbe' D' e 'C'? – MiniGod

+1

upvote per descrivere la differenza tra .. e ... e fornire esempi. Risposta fantastica! –

8

Se siete sul ramo che si è creato:

git log master.. 
Problemi correlati