Kaip gauti maišą dabartiniam įsipareigojimui git?

Norėčiau (dabar) išlaikyti galimybę susieti „Git“ pakeitimų rinkinį su TFS saugomais darbo elementais.

Aš jau parašiau įrankį (naudojant „Git“ kabliuką), kuriame galiu į „Git“ pakeitimų pranešimą įtraukti darbo identifikatorius.

Tačiau taip pat norėčiau išsaugoti „Git“ fiksavimo identifikatorių (hash) TFS darbo vietos vartotojo lauke. Tokiu būdu, aš galiu patikrinti TFS darbą ir pamatyti, ką „Git“ pakeitimai susiję su darbo elementu.

Kaip aš galiu lengvai gauti maišą iš dabartinio įsipareigojimo iš git?

1548 m
04 июня '09 в 11:42 2009-06-04 11:42 „Sardaukar“ yra nustatytas birželio 04 d., 09:42 2009-06-04 11:42
@ 19 atsakymų

Norėdami įjungti savavališką nuorodą į išplėstinį objektą į SHA-1, naudokite, pavyzdžiui, „ git-rev-parse“

 git rev-parse HEAD 

arba

 git rev-parse --verify HEAD 

Sidenote: jei norite pasukti nuorodas ( šakas ir žymes ) SHA-1, yra git show-ref ir git for-each-ref .

2269
04 июня '09 в 12:05 2009-06-04 12:05 atsakymą davė Jakubas Narębskis birželio 04 d., 09:05 2009-06-04 12:05

Jei jums reikia tik sumažinto maišos:

 git log --pretty=format:'%h' -n 1 

Be to, naudojant% H yra dar vienas būdas gauti ilgą maišą.

357
01 окт. atsakymas suteiktas 01- ojo dešimtmečio kultūrai . 2011-10-01 02:32 '11 at 2:32 2011-10-01 02:32

Kitas naudojant git žurnalą:

 git log -1 --format="%H" 

Jis yra labai panašus į @outofculture, nors ir šiek tiek trumpesnis.

119
21 нояб. atsakymą pateikė Paul Pladijs lapkričio 21 d 2011-11-21 21:48 '11, 21:48, 2011-11-21 21:48

Norėdami gauti visą SHA:

 $ git rev-parse HEAD cbf1b9a1be984a9f61b79a05f23b19f66d533537 

Jei norite gauti sutrumpintą versiją:

 $ git rev-parse --short HEAD cbf1b9a 
72
29 июля '16 в 23:04 2016-07-29 23:04 Atsakymą Aleksandras davė liepos 16 d., 16 d., 23:04. 2016-07-29 23:04

Dėl išsamumo, nes niekas to dar nepasiūlė. .git/refs/heads/master - tai failas, kuriame yra tik viena eilutė: paskutinis įvykdymo maišas master . Taigi galite tiesiog jį perskaityti.

Arba, kaip komandą:

 cat .git/refs/heads/master 

Atnaujinti:

Atkreipkite dėmesį, kad „git“ dabar palaiko kai kurių „head-ref“ failų išsaugojimą pakuotės-ref faile vietoj failo, esančio / refs / heads / aplanke. https://www.kernel.org/pub/software/scm/git/docs/git-pack-refs.html

65
16 окт. Atsakymas duotas Deestan 16 okt. 2012-10-16 14:34 '12, 14:34, 2012-10-16 14:34

Taip pat visada yra git describe . Pagal numatytuosius nustatymus tai suteikia jums

 john@eleanor:/dev/shm/mpd/ncmpc/pkg (master)$ git describe --always release-0.19-11-g7a68a75 
39
26 авг. John Tyree atsakymas rugpjūčio 26 d 2011-08-26 13:43 '11, 13:43, 2011-08-26 13:43

Nustatykite maišelį

 git show -s --format=%H 

Sutrumpintas įsipareigojimas

 git show -s --format=%H 

Spauskite čia norėdami gauti daugiau git show pavyzdžių.

31
27 марта '17 в 22:33 2017-03-27 22:33 atsakymas pateikiamas ecwpz91 kovo 27 d. 17, 22:33 2017-03-27 22:33

Naudokite git rev-list --max-count=1 HEAD

25
04 июня '09 в 11:48 2009-06-04 11:48 atsakymą pateikė Robert Munteanu birželio 04 d., 09:48 2009-06-04 11:48

Jei reikia įrašyti kintamąjį į kintamąjį scenarijaus metu, galite naudoti

 last_commit=$(git rev-parse HEAD) 

Arba jei reikia tik pirmųjų 10 simbolių (pvz., Github.com)

 last_commit=$(git rev-parse HEAD | cut -c1-10) 
19
15 июля '12 в 19:04 2012-07-15 19:04 atsakymą pateikė Henkas liepos 15 d. 12 val. 2012-07-15 19:04

Labiausiai glaustas būdas:

 git show --pretty=%h 

Jei norite nurodyti tam tikrą skaičių balso skaitmenų, galite pridėti:

 --abbrev=n 
13
07 февр. Atsakymą pateikė Brian Peterson 07 Feb. 2014-02-07 09:43 '14 at 9:43 2014-02-07 09:43

Jums gali prireikti slapyvardžio, todėl nereikia įsiminti visų detalių. Atlikus vieną iš šių veiksmų, galite tiesiog įvesti:

 $ git lastcommit 49c03fc679ab11534e1b4b35687b1225c365c630 

Vadovaudamiesi priimtu atsakymu, galite įdiegti du būdus:

1) Išmokykite git aiškiai redaguodami pasaulinę konfigūraciją (mano pradinis atsakymas):

  # open the git config editor $ git config --global --edit # in the alias section, add ... [alias] lastcommit = rev-parse HEAD ... 

2) Arba, jei jums patinka spartusis klavišas, skirtas mokyti git nuorodą, kaip neseniai komentavo Adrien:

 $ git config --global alias.lastcommit "rev-parse HEAD" 

Tokiu atveju naudokite git lastcommit kad būtų rodomas naujausias įsipareigojimo maišas.

11
09 окт. atsakymas pateikiamas miraculixx 09 okt. 2015-10-09 15:53 '15, 15:53, 2015-10-09 15:53

Jei jums reikia atlikti superhacker metodą:

 cat .git/`cat .git/HEAD | cut -d \ -f 2` 

Apskritai, git saugo HEAD vietą .git / HEAD kaip ref: {path from .git} . Ši komanda nuskaito, išskiria „ref:“ ir skaito bet kokį failą, į kurį jis nurodo.

Tai, žinoma, nepavyks išsikabinti galvos režimu, nes HEAD nebus „ref: ...“, bet pats maišas - bet jūs žinote, aš nemanau, kad jūs tikitės daug įgūdžių savo vienoje linijoje. Jei nemanote, kad semikonai yra sukčiai, ...

 HASH="ref: HEAD"; while [[ $HASH == ref\:* ]]; do HASH="$(cat ".git/$(echo $HASH | cut -d \ -f 2)")"; done; echo $HASH 
11
14 окт. Atsakymas suteiktas Fordi 14 okt. 2015-10-14 22:15 '15, 10:15 pm 2015-10-14 22:15

Man reikėjo kažko šiek tiek kitokio: rodyti visą „sha1“ įsipareigojimą, bet pridėti žvaigždutę iki galo, jei darbo katalogas nėra švarus. Jei nenorėjau naudoti kelių komandų, nė vienas iš ankstesnių atsakymų variantų neveikia.

Čia yra vienas įdėklas, kuris leidžia:
git describe --always --abbrev=0 --match "NOT A TAG" --dirty="*"
Rezultatas: f5366ccb21588c0d7a5f7d9fa1d3f85e9f9d1ffe*

Paaiškinimas: aprašo (naudojant anotuotas žymes) dabartinę prievolę, bet tik su žymėmis, kuriose yra „NOT TAG“. Kadangi žymos negali turėti tarpų, tai niekada neatitinka žyma, ir kadangi mes norime parodyti „ --always “ rezultatus, komanda grįžta su viso ( --abbrev=0 ) --dirty .

Jei nenorite pridėti žvaigždutės, jis veikia kaip ir visos kitos ankstesnių atsakymų komandos:
git describe --always --abbrev=0 --match "NOT A TAG"
Rezultatas: f5366ccb21588c0d7a5f7d9fa1d3f85e9f9d1ffe

6
17 февр. Atsakymas duotas Rado 17 vasario mėn. 2018-02-17 22:06 '18, 10:06 val. 2018-02-17 22:06
 git show-ref --head --hash head 

Jei ketinate naudoti greitį, Deestano paminėtas metodas

 cat .git/refs/heads/<branch-name> 

žymiai greičiau nei bet kuris kitas čia nurodytas metodas.

5
30 апр. Dennis atsakymas, pateiktas balandžio 30 d 2015-04-30 10:06 '15 - 10:06 2015-04-30 10:06

Štai vienas eilutės šriftas Bash korpuse, naudojant tiesioginį skaitymą iš git failų:

 (head=($(<.git/HEAD)); cat .git/${head[1]}) 

Jums reikia paleisti aukščiau esančią komandą savo git root aplanke.

Šis metodas gali būti naudingas, jei turite saugyklų failus, bet git komanda nėra įdiegta.

Jei tai neveikia, .git/refs/heads yra .git/refs/heads kurių skyriai yra.

5
06 окт. atsakymas pateikiamas kenorb 06 okt. 2017-10-06 01:11 '17 at 1:11 2017-10-06 01:11

.gitconfig failo namų-dir faile pridėkite toliau pateiktą

 [alias] sha = rev-parse HEAD 

tada bus lengviau prisiminti:

 $ git sha 59fbfdbadb43ad0b6154c982c997041e9e53b600 
2
18 февр. atsakymas pateikiamas jo_ 18 vas . 2016-02-18 19:16 '16 at 19:16 2016-02-18 19:16

Čia yra dar vienas būdas tai padaryti :)

 git log | grep -o '\w\{8,\}' | head -n 1 
1
10 февр. Atsakymą pateikė Marcelo Lazaroni , vasario 10 d. 2017-02-10 18:14 '17, 18:14 pm 2017-02-10 18:14

Toliau pateikiami žingsniai, padėję man panaudoti įsipareigojimą:

  1. Įveskite nuorodą į GIT HUB, pavyzdžiui: https://github.<xyz.abc>.com
  2. Prisijungę prie sistemos, teksto laukelyje „Ieškoti arba eiti į“ įveskite:

     hash:<GIT COMMIT HASH> 
  3. Pasirinkite tarp „Visų„ GitHub Enterprise “arba„ Šioje organizacijoje “priklausomai nuo jūsų poreikių.

  4. Paspauskite Enter.
1
31 янв. Atsakymą ASethi pateikė sausio 31 d. 2019-01-31 12:38 '19 , 12:38 pm 2019-01-31 12:38

Čia yra dar vienas tiesioginės prieigos įgyvendinimas:

 head="$(cat ".git/HEAD")" while [ "$head" != "${head#ref: }" ]; do head="$(cat ".git/${head#ref: }")" done 

Jis taip pat veikia „http“, kuris yra naudingas vietiniams paketų archyvams (aš žinau, kad viešosioms svetainėms nerekomenduojama .git katalogo pasiekti):

 head="$(curl -s "$baseurl/.git/HEAD")" while [ "$head" != "${head#ref: }" ]; do head="$(curl -s "$baseurl/.git/${head#ref: }")" done 
0
04 нояб. Atsakymas duotas Daniel Alder . 2016-11-04 16:20 '16 at 16:20 2016-11-04 16:20