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.