2013-03-28 9 views
41

Come posso verificare con la riga di comando l'ultimo hash di commit di un particolare ramo git?Comando per ottenere l'ultimo hash di commit git da un ramo

+1

Hai provato a usare 'git log -n 1' quando hai controllato che specifica ramo? –

+0

log git fornisce hash repository locali, ma il repository git hub ha un nuovo hash. – mbdvg

+0

'git log -n 1 [branch_name]' branch_name (può essere remoto o locale) è facoltativo. Senza branch_name mostrerà l'ultimo commit del ramo corrente. – codeit

risposta

29

Usa git ls-remote git://github.com/<user>/<project>.git.Per esempio, il mio progetto trac-backlog dà:

:: git ls-remote git://github.com/jszakmeister/trac-backlog.git 
5d6a3c973c254378738bdbc85d72f14aefa316a0 HEAD 
4652257768acef90b9af560295b02d0ac6e7702c refs/heads/0.1.x 
35af07bc99c7527b84e11a8632bfb396823326f3 refs/heads/0.2.x 
5d6a3c973c254378738bdbc85d72f14aefa316a0 refs/heads/master 
520dcebff52506682d6822ade0188d4622eb41d1 refs/pull/11/head 
6b2c1ed650a7ff693ecd8ab1cb5c124ba32866a2 refs/pull/11/merge 
51088b60d66b68a565080eb56dbbc5f8c97c1400 refs/pull/12/head 
127c468826c0c77e26a5da4d40ae3a61e00c0726 refs/pull/12/merge 
2401b5537224fe4176f2a134ee93005a6263cf24 refs/pull/15/head 
8aa9aedc0e3a0d43ddfeaf0b971d0ae3a23d57b3 refs/pull/15/merge 
d96aed93c94f97d328fc57588e61a7ec52a05c69 refs/pull/7/head 
f7c1e8dabdbeca9f9060de24da4560abc76e77cd refs/pull/7/merge 
aa8a935f084a6e1c66aa939b47b9a5567c4e25f5 refs/pull/8/head 
cd258b82cc499d84165ea8d7a23faa46f0f2f125 refs/pull/8/merge 
c10a73a8b0c1809fcb3a1f49bdc1a6487927483d refs/tags/0.1.0 
a39dad9a1268f7df256ba78f1166308563544af1 refs/tags/0.2.0 
2d559cf785816afd69c3cb768413c4f6ca574708 refs/tags/0.2.1 
434170523d5f8aad05dc5cf86c2a326908cf3f57 refs/tags/0.2.2 
d2dfe40cb78ddc66e6865dcd2e76d6bc2291d44c refs/tags/0.3.0 
9db35263a15dcdfbc19ed0a1f7a9e29a40507070 refs/tags/0.3.0^{} 

Proprio grep per quello che vi serve e tagliare fuori:

:: git ls-remote git://github.com/jszakmeister/trac-backlog.git | \ 
    grep refs/heads/master | cut -f 1 
5d6a3c973c254378738bdbc85d72f14aefa316a0 

In alternativa, è possibile specificare quali arbitri che si desidera sulla riga di comando e evitare il grep con:

:: git ls-remote git://github.com/jszakmeister/trac-backlog.git refs/heads/master | \ 
    cut -f 1 
5d6a3c973c254378738bdbc85d72f14aefa316a0 

Nota: non deve essere il git:// URL, potrebbe essere https:// o [email protected]: troppo.

+1

Grazie jszakmeister, ha risolto il mio problema – mbdvg

+2

Merita più amore. Funziona magnificamente – SuperFamousGuy

2

Provare a utilizzare git log -n 1 dopo aver eseguito un git checkout branchname. Mostra l'hash del commit, l'autore, la data e il messaggio di commit per l'ultimo commit.

Eseguire prima un git pull origin/branchname per assicurarsi che il repository locale corrisponda a monte.

Se forse volete solo per vedere un elenco dei commit la filiale locale si trova dietro sul ramo remota fare questo:

git fetch origin 
git cherry localbranch remotebranch 

Questo elenco di tutti gli hash dei commit che non avete ancora fuso nel tuo ramo locale.

+0

il mio requisito è quello di controllare repository locali e repository github hash di commit sono uguali o no, come possiamo fare questo? – mbdvg

+0

Per quanto ne so, non c'è modo in cui gli hash di commit potrebbero differire tra il repository locale e il repository remoto per gli stessi commit. Forse intendevi un elenco di commit che il tuo repository locale è mancante rispetto al repository remoto? –

+0

Sì Rick van, c'è una discrepanza, quindi, voglio mostrare che c'è una differenza nel repository locale e github, quindi ho bisogno di un modo per scoprire – mbdvg

1

si può git fetch nameofremoterepo, quindi git log

e personalmente, ho un alias gitlog a git log --graph --oneline --pretty --decorate --all. provare e vedere se si adatta

+0

E git fetch non tira ancora le modifiche – nglinh

+0

'--online 'è una scorciatoia per' --pretty = oneline --abbrev-commit'. Ma stai usando '--pretty', che ripristina' --pretty = oneline' ... Vorrei raccomandare 'git log --graph --abbrev-commit --decorate --all' invece. –

+0

Fresco. Non me ne sono accorto. Grazie! – nglinh

0

In un commento che hai scritto

voglio dimostrare che c'è una differenza di repo locale e GitHub

Come già detto in un'altra risposta, prima devi fare un git fetch origin. Poi, se il telecomando è davanti alla vostra filiale di corrente, è possibile elencare tutti i commit tra la filiale locale e il telecomando con

git log master..origin/master --stat 

Se la vostra filiale locale è davanti:

git log origin/master..master --stat 

--stat mostra un elenco anche dei file modificati.

Se si desidera elencare in modo esplicito le aggiunte e le cancellazioni, utilizzare git diff:

git diff master origin/master 
88
git log -n 1 [branch_name] 

branch_name (possono essere filiale remota o locale) è facoltativo. Senza branch_name, mostrerà l'ultimo commit sul ramo corrente.

Ad esempio:

git log -n 1 
git log -n 1 origin/master 
git log -n 1 some_local_branch 

git log -n 1 --pretty=format:"%H" #To get only hash value of commit 
+9

git log -n 1 --pretty = formato: "% H" funziona perfettamente per me – Jaro

+3

Ottieni hash breve: 'git rev-parse --short --verify my_branch' dalla domanda simile: http://stackoverflow.com/ a/949391/134761 – angularsen

0

Si noti che quando si utilizza l'opzione "git log -n 1 [branch_name]". -n restituisce solo una riga di registro ma l'ordine in cui viene restituito non è garantito. seguito è estratto dalla pagina man git-log

..... 
..... 
Commit Limiting 

Besides specifying a range of commits that should be listed using the special notations explained in the  description, additional commit limiting may be applied. 

Using more options generally further limits the output (e.g. --since=<date1> limits to commits newer than <date1>, and using it with --grep=<pattern> further limits to commits whose log message has a line that matches <pattern>), unless otherwise noted. 

Note that these are applied before commit ordering and formatting options, such as --reverse. 

-<number> 
-n <number> 
..... 
..... 
Problemi correlati