2009-05-27 3 views
17

In Git, esistono numerosi modi per fare riferimento a un commit, incluso l'hash SHA completo o una forma abbreviata dell'hash (ad esempio, i primi 6 caratteri o giù di lì). Puoi anche nominare commit usando una sintassi "friendly", come HEAD, HEAD ^, HEAD ^^, HEAD ~ 3, e così via.In Git, c'è un modo per ottenere il nome "amichevole" per un commit arbitrario?

Dato un commit arbitrario in forma hash SHA, c'è uno strumento in Git per trovare un nome "amichevole" per detto commit?

Se uso git-show-branch, ottengo un elenco di revisioni in forma "amichevole", quindi mi sento come ci deve essere un modo ... Non riesco a trovare uno strumento per farlo.

+0

Solo per completezza, ecco la domanda opposta: http://stackoverflow.com/questions/3003554/is-there-any-way-to-get-the -sha-of-a-commit-from-its-message – Benjol

risposta

17

È possibile utilizzare "git nome-rev" per ottenere il modulo che si sta chiedendo. Un problema con quella forma è che, essendo relativo a un ramo, non è un nome permanente. Quindi un'alternativa è "git describe" che produce un nome descrittivo alternativo basato sulla distanza di un tag rispetto a un dato commit.

Ad esempio:

[email protected]:~/src/git <master>$ git name-rev 3cd7388 
3cd7388 master~2 

Ma poi, dopo faccio un "git pull", maestro ~ 2 potrebbe significare qualcos'altro. Al contrario:

[email protected]:~/src/git <master>$ git describe 3cd7388 
v1.6.3.1-153-g3cd7388 

Now "v1.6.3.1-153-g3cd7388" è un nome permanente. Certo, è ancora un po 'lungo (anche se è possibile accorciare il bit di hash alla fine specificando "--abbrev = 4" per esempio) ma comunica che 3cd7388 è 153 cambiamenti dopo la versione 1.6.3.1.

+1

Grazie, entrambe le tecniche sono utili. Ero più interessato al comportamento di git-name-rev, perché il mio caso d'uso specifico era che stavo usando git-log --grep per trovare un commit con un messaggio specifico, e quindi volevo essere in grado di fare riferimento a come parametro per git-revert senza dover ricordare un hash. – mipadi

+2

In tal caso, nota l'opzione "--stdin" per git nome-rev: dovresti essere in grado di eseguire il piping dell'output di git log direttamente in esso. – araqnid

+0

Wow. Quella. È. Eccezionale. Grazie! – mipadi

3

Prova git describe:

$ git describe --all --contains 90de2680dc54c0d600b0694bd175bd09357a8dba 
master~2