Comando per ottenere l'ultimo hash del commit Git da un ramo [chiuso]


88

Come posso controllare con la riga di comando l'ultimo hash di commit di un particolare ramo Git?


1
Hai provato a utilizzare "git log -n 1" dopo aver estratto quel ramo specifico?
— Rick van Bodegraven

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

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

11
Con voti per chiudere in questo modo, SO sta diventando Wikipedia.
— Eric Walker

Vedi anche qui .
— Raphael

Risposte:


62

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

:: 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^{}

Basta grep per quello che ti serve e taglialo:

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

Oppure, puoi specificare quali ref vuoi sulla riga di comando ed 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 l' git://URL. Potrebbe essere https://o git@github.com:anche.

Inizialmente, questo era orientato a scoprire l'ultimo commit di un ramo remoto (non solo dal tuo ultimo recupero, ma l'ultimo commit effettivo nel ramo sul repository remoto). Se hai bisogno dell'hash di commit per qualcosa a livello locale, la risposta migliore è:

git rev-parse branch-name

È veloce, facile e un unico comando. Se vuoi l'hash del commit per il ramo corrente, puoi guardare HEAD:

git rev-parse HEAD

4
Merita più amore. Funziona magnificamente.
— SuperFamousGuy

git rev-parse my_branch_nameO git log -n 1 my_branch_name | grep commit | awk '{ print $2 }'risposta più semplice; produrrà solo l'ultimo hash di commit dimy_branch_name
— betoharres

@betoharres l'OP stava originariamente cercando di determinare il commit su un repository remoto (non quello che abbiamo refs/remotes, ma l'effettivo repository remoto). git rev-parse branch-nameè sicuramente la strada da percorrere per una filiale locale.
— John Szakmeister

Questo funziona solo nel campo del git svnperché git svn fetchcambia l' git logoutput e quindi git lognon può più essere utilizzato per ottenere l'ultimo hash di commit del repository git remoto .
— Andry

@Andry Non sono sicuro di cosa intendi ... Ho problemi a seguire il tuo commento. Puoi spiegare di più?
— John Szakmeister,

142
git log -n 1 [branch_name]

branch_name(può essere un ramo remoto o locale) è facoltativo. Senza branch_name, mostrerà l'ultimo commit sul ramo corrente.

Per 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

20
git log -n 1 --pretty = format: "% H" funziona perfettamente per me
— Jaro

9
Ottenere breve hash: 'git-rev parse --short --verify my_branch' dal domanda simile: stackoverflow.com/a/949391/134761
— angularsen

Bene, l'ho aggiunto al mio .gitconfig in modo da poter copiare l'ultimo commit con git hash | pbcopy clip "" [alias] hash = "! F () {\ git log -n 1 --pretty = format:"% H "; \}; f "` ``
— Pantaloni

2

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

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

Se forse desideri solo vedere un elenco dei commit dietro il tuo ramo locale sul ramo remoto, fai questo:

git fetch origin
git cherry localbranch remotebranch

Questo elencherà tutti gli hash dei commit che non hai ancora unito nel tuo ramo locale.


il mio requisito è controllare che i repository locali e i repository GitHub commit hash siano uguali o meno, come possiamo farlo?
— mbdvg

Per quanto ne so, non c'è modo che gli hash di commit possano differire tra il tuo repository locale e quello remoto per gli stessi commit. Forse intendevi un elenco dei commit mancanti nel tuo repository locale rispetto al repository remoto?
— Rick van Bodegraven

Sì Rick van, c'è una mancata corrispondenza, quindi, voglio mostrare che c'è una differenza nel repository locale e github, quindi ho bisogno di un modo per scoprirlo
— mbdvg

2

git fetch nameofremoterepoallora puoigit log

e personalmente, mi alias gitlogdi git log --graph --oneline --pretty --decorate --all. prova e vedi se ti sta bene


E git fetch non tira ancora le modifiche
— nglinh

--onlineè una scorciatoia per --pretty=oneline --abbrev-commit. Ma stai usando --prettyanche tu , il che ritorna --pretty=oneline... Lo consiglierei git log --graph --abbrev-commit --decorate --allinvece.
— Felix Kling

Freddo. Non l'ho notato. Grazie!
— nglinh

0

In un commento che hai scritto

Voglio mostrare che c'è una differenza nel repository locale e GitHub

Come già accennato in un'altra risposta, dovresti fare una git fetch originprima. Quindi, se il telecomando è davanti al tuo ramo attuale, puoi elencare tutti i commit tra il tuo ramo locale e il remoto con

git log master..origin/master --stat

Se la tua filiale locale è in vantaggio:

git log origin/master..master --stat

--stat mostra anche un elenco di file modificati.

Se vuoi elencare esplicitamente le aggiunte e le eliminazioni, usa git diff:

git diff master origin/master

0

Nota che quando usi l'opzione "git log -n 1 [branch_name]". -n restituisce solo una riga di log ma l'ordine in cui viene restituito non è garantito. Di seguito è riportato un estratto dalla pagina man di 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>
.....
.....
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.