Kaip gauti dabartinį filialo pavadinimą „Git“?

Aš esu iš „Subversion“ fono ir kai turėjau filialą, žinojau, ką dirbau su „Šie darbo failai nurodo šią temą“.

Bet su „Git“ aš nesu įsitikinęs, kai redaguoju failą „NetBeans“ ar „Notepad ++“, neatsižvelgiant į tai, ar jis prijungtas prie kapitono, ar kito filialo.

Nėra jokių problemų, susijusių su git bash, tai man sako, ką aš darau.

1912 m
05 июня '11 в 23:13 2011-06-05 23:13 nustatė mike628 birželio 5 d. 11 val. 23:13 2011-06-05 23:13
@ 36 atsakymai
  • 1
  • 2
 git branch 

turi rodyti visus vietinius savo atpirkimo padalinius. Žymėtas filialas yra jūsų dabartinis filialas.

Jei norite tik filialo, kuriame esate, pavadinimą, galite:

 git branch | grep \* | cut -d ' ' -f2 
1499
05 июня '11 в 23:17 2011-06-05 23:17 atsakymas pateikiamas roberttdev birželio 05 d. 11 val. 23:17 2011-06-05 23:17

Jei norite rodyti dabartinę filialą, kuriame esate, be kitų išvardytų filialų, galite atlikti šiuos veiksmus:

 git rev-parse --abbrev-ref HEAD 
border=0

Nuoroda:

3936
27 авг. atsakymą pateikė Jistanidiot 27 rug . 2012-08-27 15:33 '12, 15:33 2012-08-27 15:33

Jūs taip pat turite git symbolic-ref HEAD , kuri rodo visą refspec.

Jei norite rodyti tik filialo pavadinimą „Git v1.8“ ir vėlesnėse versijose („Greg“ dėka)

 $ git symbolic-ref --short HEAD 

Git v1.7 + galite:

 $ git rev-parse --abbrev-ref HEAD 

Abu filialai turi nurodyti tą patį šakos pavadinimą. Jei esate atskiroje galvoje, atsakymai skiriasi.

Pastaba:

Ankstesniame kliente jis veikia:

 $ git symbolic-ref HEAD | sed -e "s/^refs\/heads\///" 

- Darien 2014 m. Kovo 26 d

440
08 авг. atsakymas pateikiamas Wernight 08 rug . 2012-08-08 18:55 '12 at 18:55 2012-08-08 18:55

Savo nuoroda (tačiau tai gali būti naudinga kitiems) peržiūrėjau daugumą (pagrindinių komandų eilučių) metodų, paminėtų šioje temoje, kurių kiekvienas taikomas keliems naudojimo atvejams: HEAD yra (rodo):

  • vietinis departamentas (kapitonas)
  • nuotolinio sekimo filialas sinchroniškai su vietiniu filialu (kilmė / kapitonas tuo pačiu įsipareigoja kaip pagrindinis)
  • nuotolinis takelis, kuris nėra sinchronizuotas su vietine filialu
  • žyma (v1.2.3)
  • submodulis (paleistas submodulių kataloge)
  • iš viso nutraukta galvutė (nė viena iš pirmiau nurodytų)

Rezultatai:

  • git branch | sed -n '/\*/s///p'
    • lauko biuras: master
    • nuotolinio stebėjimo filialas (sinchroninis): (detached from origin/master)
    • nuotolinio stebėjimo filialas (nesinchronizuotas): (detached from origin/feature-foo)
    • žyma: (detached from v1.2.3)
    • „Submodule“: „(HEAD atjungtas, 285f294)
    • bendras galvos (detached from 285f294) : (detached from 285f294)
  • git status | head -1
    • Vietinis biuras: # On branch master
    • nuotolinio sekimo filialas (sinchroninis): # HEAD detached at origin/master
    • nuotolinio stebėjimo filialas (nesinchronizuotas): # HEAD detached at origin/feature-foo
    • žyma: # HEAD detached at v1.2.3
    • submodulis: # HEAD detached at 285f294
    • bendras galvos # HEAD detached at 285f294 : # HEAD detached at 285f294
  • git describe --all
    • Vietinis biuras: heads/master
    • nuotolinio sekimo filialas (sinchroninis): heads/master (pastaba: ne remotes/origin/master )
    • nuotolinio sekimo filialas (nesinchronizuotas): remotes/origin/feature-foo
    • Žyma: v1.2.3
    • submodulis: remotes/origin/HEAD
    • bendroji v1.0.6-5-g2393761 galvutė: v1.0.6-5-g2393761
  • cat.git/HEAD :
    • Vietinis biuras: ref: refs/heads/master
    • submodulis: cat:.git/HEAD: Not a directory
    • visi kiti naudojimo atvejai: SHA atitikimas įsipareigoja
  • git rev-parse --abbrev-ref HEAD
    • lauko biuras
    • visi kiti naudojimo atvejai: HEAD
  • git symbolic-ref --short HEAD
    • lauko biuras
    • visi kiti naudojimo atvejai: fatal: ref HEAD is not a symbolic ref

(Dėl jūsų informacijos tai atlikta naudojant git versiją 1.8.3.1)

190
25 окт. Stefaano atsakymas spalio 25 d. 2013-10-25 11:53 '13, 11:53, 2013-10-25 11:53

Kita alternatyva:

 git name-rev --name-only HEAD 
124
02 нояб. atsakymą pateikė Filipas Spiridonovas, lapkričio 2 d. 2015-11-02 22:17 '15, 10:17 pm 2015-11-02 22:17

Pakankamai geras, aš jį gavau viename laineryje

 git branch | sed -n '/\* /s///p' 

(kreditas: ribotas atsiskaitymas)

Ir kol aš esu, vienas linijinis nuotolinis stebėjimas (jei yra)

 git rev-parse --symbolic-full-name --abbrev-ref @{u} 
89
04 апр. Atsakymą pateikė Olivier Refalo 04 Bal. 2012-04-04 18:20 '12 at 18:20 pm 2012-04-04 18:20

Jūs galite tiesiog įvesti komandų eilutę (konsolę) Linux saugyklų kataloge:

 $ git status 

ir pamatysite tekstą, tarp kurio yra kažkas panašaus į:

 ... On branch master ... 

tai reiškia, kad esate master filiale. Jei šiuo metu redaguojate failą ir esate toje pačioje vietinėje saugykloje (vietiniame kataloge, kuriame yra failai, esantys „Git“ versijos valdymo sistemoje), redaguojate šią temą.

57
05 июня '11 в 23:31 2011-06-05 23:31 atsakymą davė Tadeckas birželio 05d . 11 d. 23:31 2011-06-05 23:31
 git symbolic-ref -q --short HEAD 

Aš naudoju jį scenarijuose, kuriems reikia dabartinio filialo pavadinimo. Jis parodys dabartinę trumpą simbolinę nuorodą į HEAD, kuri bus jūsų dabartinio filialo pavadinimas.

26
03 окт. Atsakyti Kousha 03 oct. 2013-10-03 01:09 '13, 1:09 2013-10-03 01:09
 git branch | grep -e "^*" | cut -d' ' -f 2 

bus rodomas tik filialo pavadinimas

24
14 июня '16 в 16:08 2016-06-14 16:08 atsakymas pateikiamas ungalcrys birželio 14 d., 16 val. 16:08 2016-06-14 16:08

Rastas tokio pat ilgio komandų eilutės sprendimas kaip „ Oliver Refalo“, naudodamas gerą „ol awk“:

 git branch | awk '/^\*/{print $2}' 

awk sako, kad „daryti dalykus {} eilutėse, atitinkančiose įprastą išraišką“. Pagal numatytuosius nustatymus jis priima laukus, kuriuos apibrėžia erdvės, todėl įveskite antrą. Jei galite daryti prielaidą, kad tik linija su jūsų filialu yra *, galite iš naujo nustatyti ^. Ah, bash golfas!

21
20 февр. Atsakyti Silas Barta 20 vas. 2014-02-20 01:50 '14 at 1:50 2014-02-20 01:50

git branch rodo tik dabartinį filialo pavadinimą.

Nors git filialas parodys jums visus filialus ir pažymės dabartinę žvaigždutę žvaigždute, jis gali būti pernelyg sudėtingas dirbant su daugybe šakų.

Jei norite rodyti tik filialą, naudokite:

 git rev-parse --abbrev-ref HEAD 
20
25 мая '18 в 8:33 2018-05-25 08:33 atsakymą davė Lawrence Paje gegužės 25 d. 18 val. 8:33 val.
 #!/bin/bash function git.branch { br=`git branch | grep "*"` echo ${br/* /} } git.branch 
17
23 янв. Atsakymas duotas Dziamid Sausio 23 d. 2012-01-23 20:11 '12, 20:11 2012-01-23 20:11

Kodėl gi ne naudoti git -ware korpuso eilutę, kuri jums pasakys dabartinio filialo pavadinimą? git status taip pat padeda.


Kaip contrib/ git-prompt.sh (git versija 2.3.0), kaip apibrėžta pagalbinėje funkcijoje __git_ps1

  • Pirma, yra ypatingas atvejis, jei aptinkamas perskirstymas. „Git“ peradresavimo proceso metu naudoja nepažymėtą filialą (atskirą HEAD), kad jis būtų atominis, o originalus filialas išsaugomas kitur.

  • Jei .git/HEAD failas yra simbolinė nuoroda (labai retas atvejis nuo senovės „Git“ istorijos), ji naudoja git symbolic-ref HEAD 2>/dev/null

  • Priešingu atveju jis nuskaito failą .git/HEAD . Šie veiksmai priklauso nuo jo turinio:

    • Jei šio failo nėra, nėra dabartinio filialo. Tai paprastai atsitinka, jei kapinynas yra plikas.

    • Jei jis prasideda prefiksu 'ref: ' , tada .git/HEAD yra simref (simbolinė nuoroda), ir mes esame įprasto filialo. Pašalinkite šį priešdėlį, kad gautumėte visą pavadinimą, ir padalinkite refs/heads/ į trumpą dabartinio filialo pavadinimą:

       b="${head#ref: }" # ... b=${b##refs/heads/} 
    • Jei jis neprasideda su 'ref: ' , tada HEAD (anoniminis filialas) jį išjungia, nurodydamas tiesioginę fiksaciją. Naudokite „ git describe ... norėdami parašyti dabartinį įvykį įskaitoma forma.

Tikiuosi, kad tai padės.

15
06 июня '11 в 1:25 2011-06-06 01:25 atsakymą davė Jakubas Narębskis birželio 06 d. 11 d. 1:25. 2011-06-06 01:25

Jūs galite naudoti git bash darbo kataloge.

 git status -b 

jis jums pasakys, kokiame skyriuje esate, yra daug naudingų komandų, iš kurių kai kurios

 -s 

- trumpas Išduoti trumpą formatą.

-b -branch Rodyti filialo ir stebėjimo informaciją net ir trumpu formatu.

- porcelianas [=] Suteikite rezultatą paprastu parašo formatu. Tai atrodo kaip trumpas išėjimas, bet išliks stabilus git versijose ir nepriklausomai nuo vartotojo konfigūracijos. Išsamiau žr. Toliau.

Versijos parametras naudojamas formato versijai nurodyti. Tai yra neprivaloma, o numatytasis formatas yra pirminė v1 versija.

- ilgas Suteikite rezultatą ilgą formatą. Tai yra numatytoji vertė.

-v - detalės Be pakeistų failų pavadinimų, taip pat rodomi teksto pakeitimai, kurie yra nustatyti, kad būtų įvykdyti. Jei -v yra nurodomas du kartus, taip pat rodomi dar nepateikti darbinio medžio pakeitimai (ty kaip git diff išėjimas).

14
08 дек. Atsakymas duotas Prateek Gangwal 08 dec. 2016-12-08 15:19 '16 at 15:19 2016-12-08 15:19

Aš rekomenduoju naudoti vieną iš šių dviejų komandų.

git branch | grep -e "^*" | cut -d' ' -f 2

Arba tas pats

git status | sed -n 1p | cut -d' ' -f 3

ARBA (daugiau žodžio)

git status -uno -bs| cut -d'#' -f 3 | cut -d. -f 1| sed -e 's/^[ \t]//1'| sed -n 1p

12
22 февр. Jackotonye atsakymas, pateiktas vasario 22 d. 2018-02-22 19:12 '18, 07:12 pm 2018-02-22 19:12

Laikui bėgant galime turėti labai ilgą šakų sąrašą.

Nors kai kurie kiti sprendimai yra dideli, tai, ką aš darau (supaprastintas Jokūbo atsakymu):

 git branch | grep \* 

Dabar,

 git status 

veikia tik tada, kai yra vietos pokyčių

12
11 марта '14 в 23:41 2014-03-11 23:41 atsakymą karthikr pateikė kovo 14 d. 14 d. 23:41 2014-03-11 23:41

Atsiprašome, šis atsakymas yra kitas komandų eilutės atsakymas, tačiau tai buvo, ko ieškojau, kai rado šį klausimą, ir daugelis šių atsakymų buvo naudingi. Mano sprendimas yra ši bash shell funkcija:

 get_branch () { git rev-parse --abbrev-ref HEAD | grep -v HEAD || \ git describe --exact-match HEAD 2> /dev/null || \ git rev-parse HEAD } 

Tai visada turėtų duoti man kažką skaitymo ir tiesiogiai naudoti git checkout kaip argumentą.

  • vietiniame skyriuje: feature/HS-0001
  • pagal pažymėtą įsipareigojimą (atjungta): v3.29.5
  • ant nuotolinio atšakos (atjungtas, nepažymėtas): SHA1
  • bet kuriam kitam atskiram fiksavimui: SHA1
12
08 апр. atsakymas pateikiamas dmaestro12 08 balandžio. 2016-04-08 19:06 '16 at 19:06 2016-04-08 19:06

„Netbeans“ įsitikinkite, kad versijos anotacijos yra įjungtos (žr. → Rodyti versijų etiketes). Tada galite pamatyti filialo pavadinimą šalia projekto pavadinimo.

http://netbeans.org/bugzilla/show_bug.cgi?id=213582

11
09 авг. atsakymas pateikiamas Saroj 09 rug. 2012-08-09 19:10 '12 at 7:10 pm 2012-08-09 19:10

Mažiau triukšminga „git“ būsenos versija padės

 git status -bsuno 

Spausdina

 ## branch-name 
11
22 марта '18 в 2:55 2018-03-22 02:55 atsakymas yra dgolovin kovo 22 d. 18 val. 2:55 2018-03-22 02:55

Turiu paprastą scenarijų, vadinamą git-cbr (dabartinis filialas), kuris išspausdina dabartinį filialo pavadinimą.

 #!/bin/bash git branch | grep -e "^*" 

Šį scenarijų įdėjau į vartotojo aplanką ( ~/.bin ). Šis aplankas yra $PATH .

Taigi dabar, kai aš esu git saugykloje, tiesiog įveskite git cbr kad išspausdintumėte dabartinį filialo pavadinimą.

 $ git cbr * master 

Tai veikia, nes git komanda priima pirmąjį argumentą ir bando paleisti scenarijų, vadinamą git-arg1 . Pavyzdžiui, „ git branch bando paleisti scenarijų, vadinamą „ git-branch ir tt

10
03 мая '16 в 20:47 2016-05-03 20:47 atsakymą pateikė Diego Pino gegužės 16 d. 16, 20:47 2016-05-03 20:47

Kaip apie tai?

 { git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##" 
10
11 апр. ShogunPanda atsakymas, pateiktas balandžio 11 d 2013-04-11 20:29 '13, 08:29 pm 2013-04-11 20:29

Kitoje komandoje nurodoma, kur esate.

 git branch | grep ^\* 

Jei nenorite įvesti šios ilgos komandos kiekvieną kartą, kai norite išmokti šaką, ir naudokite „Bash“, nurodykite komandai trumpą pseudonimą, pavyzdžiui, „ cb slapyvardį.

 alias cb='git branch | grep ^\*' 

Kai esate pagrindiniame filiale ir „ $ eilutėje, gausite * master taip.

 $ cb * master 
9
17 нояб. atsakymas pateikiamas mrrusof lapkričio 17 d 2016-11-17 00:19 '16 at 0:19 2016-11-17 00:19

Galite nuolat pritaikyti savo „bash“ išėjimą, kad būtų rodomas „git“ šakos pavadinimas. Tai labai patogu, kai dirbate su skirtingais filialais, nereikia visą laiką įvesti $ git status . Github repo git -ware-prompt .

Atidarykite terminalą (ctrl-alt-t) ir įveskite komandas

 mkdir ~/.bash cd ~/.bash git clone git://github.com/jimeh/git-aware-prompt.git 

Pakeiskite savo .bashrc su sudo nano ~/.bashrc (už Ubuntu) ir pridėkite toliau esančius:

 export GITAWAREPROMPT=~/.bash/git-aware-prompt source "${GITAWAREPROMPT}/main.sh" 

Tada įklijuokite kodą

 export PS1="\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\] \[$txtcyn\]\$git_branch\[$txtred\]\$git_dirty\[$txtrst\]\$ " 

Tų pačių failų pabaigoje anksčiau įdėjote diegimo kodą. Tai suteiks jums spalvingą rezultatą: 2019

14 окт. atsakymą Kirill Zhuravlov pateikė spalio 14 d. 2016-10-14 19:13 '16 at 19:13 2016-10-14 19:13

Jei tikrai norite, kad paskutinis filialas / žyma būtų iškrautas atskiroje HEAD būsenoje.

 git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev 

Atnaujinimas Geriau, jei turite ir nebijote awk.

 git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}' 
7
20 авг. atsakymas pateikiamas Ryan 20 rug. 2014-08-20 08:40 '14, 8:40 2014-08-20 08:40

Grąžina filialo arba SHA1 pavadinimą, kai esate atskiroje galvoje:

 git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD 

Tai trumpas atsakymo @ dmaestro12 ir be žymos palaikymo versija.

6
17 окт. atsakymas pateikiamas vartotojui 17 okt. 2017-10-17 23:30 '17, 11.30 val. 2017-10-17 23:30

Žinau, kad vėlyvas, bet linux / mac, iš terminalo galite naudoti šiuos.

 git status | sed -n 1p 

Paaiškinimas:

„git“ būsena → gauna darbo medžio būseną
sed -n 1p → gauna pirmąją eilutę iš būsenos korpuso

Atsakymas į pirmiau nurodytą komandą bus toks:

 "On branch your_branch_name" 
5
21 авг. atsakymas suteiktas skippy 21 rug. 2014-08-21 01:41 '14 ne 1:41 am 2014-08-21 01:41
 git status 

kartu su pakeitimais taip pat nurodys filialo pavadinimą.

Pavyzdžiui

 >git status On branch master // <-- branch name here ..... 
5
13 янв. atsakymą Satheesh Kumar pateikė sausio 13 d 2018-01-13 05:15 '18, 5:15 am 2018-01-13 05:15

Pridėti jį į PS1 naudodami „Mac“:

 PS1='\W@\u >`[ -d .git ]  git branch | grep ^*|cut -d" " -f2`> $ ' 

Prieš paleisdami anksčiau nurodytą komandą:

2019

31 окт. Abdennour TOUMI atsakymas spalio 31 d 2016-10-31 09:56 '16 at 9:56 2016-10-31 09:56

Taip pat galite naudoti GIT_BRANCH kintamąjį, kaip parodyta čia: https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

„Git“ papildinys nustato kelis aplinkos kintamuosius, kuriuos galite naudoti scenarijuose:

GIT_COMMIT - SHA srovė

GIT_BRANCH -, pavyzdžiui, naudojamo filialo pavadinimas. „šeimininkas“ arba „kilmė / foo“

GIT_PREVIOUS_COMMIT - SHA iš ankstesnio įdėto įsipareigojimo iš tos pačios šakos (dabartinė SHA, kai pirmą kartą buvo pastatytas filialas)

GIT_URL - nuotolinis saugyklos URL

GIT_URL_N - nuotolinis URL saugykla, kai yra daugiau nei 1 nuotolinio valdymo pultas. GIT_URL_1, GIT_URL_2

GIT_AUTHOR_EMAIL - siuntėjo / autoriaus el

GIT_COMMITTER_EMAIL - pranešėjas / autorius

4
11 марта '14 в 12:08 2014-03-11 12:08 atsakymą pateikė vartotojo3405314 kovo 11 d. 12:08 2014-03-11 12:08
 git branch | grep "*" | sed "s/* //" | awk '{printf $0}' | pbcopy 

Tiesioginė rezultato kopija kartone. Ačiū @ olivier-refalo už pradžią ...

2
26 апр. atsakymas, kurį pateikė SushiGrass Jacob 2013-04-26 22:55 '13, 10:55 val. 2013-04-26 22:55
  • 1
  • 2

Kiti klausimai apie arba Užduoti klausimą