Jak uzyskać aktualną nazwę oddziału w Git?

2591

Pochodzę z Subversion i kiedy miałem gałąź, wiedziałem nad czym pracuję z „Te pliki robocze wskazują na tę gałąź”.

Ale z Git nie jestem pewien, kiedy edytuję plik w NetBeans lub Notepad ++, czy jest on powiązany z master lub inną gałęzią.

W gitbash nie ma problemu , mówi mi to, co robię.

mike628
źródło
11
Pozwól, aby IDE wyświetliło plik .git/HEAD, prawdopodobnie w katalogu nadrzędnym
Tino
101
stackoverflow.com/questions/1417957/… $ git rev-parse --abbrev-ref HEAD
fantastory
7
Możliwy duplikat Pokaż tylko obecny oddział w Git
techraf
9
Z Git 2.22 (Q2 2019), trzeba będzie prostsze podejście: git branch --show-current. Zobacz moją odpowiedź tutaj .
VC

Odpowiedzi:

2301
git branch

powinien pokazać wszystkie lokalne oddziały Twojego repozytorium. Oddział oznaczony gwiazdką to Twój obecny oddział.

Jeśli chcesz odzyskać tylko nazwę oddziału, w którym jesteś, możesz:

git rev-parse --abbrev-ref HEAD
roberttdev
źródło
Ale to nie pomaga mi w Notepad ++ i Netbeans. Po prostu git bash (i Probobly Vim) i wspomniałem o tym. Pracuję z innymi edytorami Ide i edytorami tekstu, które nie są wierszem poleceń.
mike628,
@ mike628 W rzeczywistości pomagają ci, z wyjątkiem tego, że chcesz czegoś dostępnego poprzez GUI. Poprawny?
Tadeck
2
Jeśli chcesz pracować w Eclipse, istnieje program o nazwie „eGit”, który ma GUI, który poinformuje cię o bieżącej gałęzi dla wszystkich repozytoriów w nim zawartych. W przeciwnym razie nie wiem ... byłbyś na łasce twórcy jakiejkolwiek wtyczki, której chcesz użyć, która jest zgodna z twoim wyborem programu (jeśli taki istnieje).
roberttdev
2
po wykonaniu git checkout --orphan foowtedy git branchnie udało się wyświetlić gałęzi foo. Podczas gdy git symbolic-ref HEADjak sugerowano, zadziałała inna odpowiedź.
Marcus Junius Brutus,
2
w dół, chcemy tylko bieżący oddział jako stdout, nie wszystkie gałęzie
Alexander Mills,
4656

Aby wyświetlić bieżącą gałąź, w której się znajdujesz, bez innych gałęzi na liście, możesz wykonać następujące czynności:

git rev-parse --abbrev-ref HEAD

Odniesienie:

Jistanidiot
źródło
132
@ChrisNelson, ponieważ wyświetla tylko bieżącą gałąź, a nie długą listę wszystkich gałęzi.
avakar
73
Dobry, niestety nie działa, jeśli jesteś w stanie „odłączonej HEAD” (po prostu wyprowadza „HEAD”, co jest całkowicie bezużyteczne).
Carlos Campderrós
34
Sądzę, że po wewnętrznej stronie gita, jeśli jesteś w stanie „odłączonej HEAD”, nie ma śledzenia gałęzi, do której należy, ponieważ git branchpokazuje * (no branch), co jest również bezużyteczne ...
Carlos Campderrós 30.01.2013
76
„git symbolic-ref --short HEAD” działa również w tym samym celu
dusktreader
22
git rev-parse --abbrev-ref HEAD 2>/dev/null Część / dev / null zapobiega wyświetleniu błędu, jeśli właśnie utworzono nowe repozytorium, które nie ma jeszcze HEAD.
Paradiesstaub
523

Masz również, git symbolic-ref HEADktóry wyświetla pełny refspec.

Aby wyświetlić tylko nazwę oddziału w Git v1.8 i nowszych (dziękuję Gregowi za wskazanie tego):

git symbolic-ref --short HEAD

W Git v1.7 + możesz także:

git rev-parse --abbrev-ref HEAD

Oba powinny podać tę samą nazwę oddziału, jeśli jesteś w oddziale. Jeśli masz odłączoną głowę, odpowiedzi mogą się różnić.

Uwaga:

W przypadku wcześniejszego klienta wydaje się to działać:

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

- Darien 26. mar 2014

Wernight
źródło
7
Jak wszystkie inne odpowiedzi, to nie działa, gdy jesteś w stanie „odłączonej HEAD”
Carlos Campderrós
51
@ CarlosCampderrós: ​​jeśli jesteś w stanie odłączonym HEAD, nie ma czegoś takiego jak bieżąca gałąź. W końcu zatwierdzenie, w którym jesteś, może być osiągalne przez zero, jedną lub więcej gałęzi.
Flimm
2
powoduje to problemy w pustych repozytoriach git, gdy nie ma HEAD
Arne
8
W wersji git 2.4.4 git rev-parse --abbrev-ref HEADpokazuje, HEADkiedy jesteś na głowie.
peterhil
Najlepsza odpowiedź jest nadal, git symbolic-ref HEAD | sed -e "s/^refs\/heads\///" ponieważ wyświetli ciąg znaków jak HEAD detached at a63917fw stanie odłączonym, w przeciwieństwie do innych odpowiedzi, które nie pokazują nic lub HEAD. To jest ważne.
Bernard,
264

Dla własnego odniesienia (ale może być użyteczne dla innych) dokonałem przeglądu większości (podstawowych linii poleceń) technik wymienionych w tym wątku, z których każda dotyczy kilku przypadków użycia: HEAD jest (wskazując na):

  • oddział lokalny (master)
  • zdalna gałąź śledzenia, zsynchronizowana z gałęzią lokalną (origin / master w tym samym zatwierdzeniu co master)
  • gałąź zdalnego śledzenia, niezsynchronizowana z gałęzią lokalną (origin / feature-foo)
  • tag (v1.2.3)
  • submodule (uruchom w katalogu submodule)
  • ogólna odłączona głowa (żadna z powyższych)

Wyniki:

  • git branch | sed -n '/\* /s///p'
    • oddział lokalny: master
    • gałąź zdalnego śledzenia (w synchronizacji): (detached from origin/master)
    • gałąź zdalnego śledzenia (nie zsynchronizowana): (detached from origin/feature-foo)
    • etykietka: (detached from v1.2.3)
    • submoduł: (HEAD detached at 285f294)
    • ogólna odłączona głowa: (detached from 285f294)
  • git status | head -1
    • oddział lokalny: # On branch master
    • gałąź zdalnego śledzenia (w synchronizacji): # HEAD detached at origin/master
    • gałąź zdalnego śledzenia (nie zsynchronizowana): # HEAD detached at origin/feature-foo
    • etykietka: # HEAD detached at v1.2.3
    • submoduł: # HEAD detached at 285f294
    • ogólna odłączona głowa: # HEAD detached at 285f294
  • git describe --all
    • oddział lokalny: heads/master
    • gałąź zdalnego śledzenia (zsynchronizowana): heads/master(uwaga: nie remotes/origin/master )
    • gałąź zdalnego śledzenia (nie zsynchronizowana): remotes/origin/feature-foo
    • etykietka: v1.2.3
    • submoduł: remotes/origin/HEAD
    • ogólna odłączona głowa: v1.0.6-5-g2393761
  • cat .git/HEAD:
    • oddział lokalny: ref: refs/heads/master
    • submoduł: cat: .git/HEAD: Not a directory
    • wszystkie pozostałe przypadki użycia: SHA odpowiedniego zatwierdzenia
  • git rev-parse --abbrev-ref HEAD
    • oddział lokalny: master
    • wszystkie pozostałe przypadki użycia: HEAD
  • git symbolic-ref --short HEAD
    • oddział lokalny: master
    • wszystkie pozostałe przypadki użycia: fatal: ref HEAD is not a symbolic ref

(FYI dokonano tego w wersji git 1.8.3.1)

Stefaan
źródło
6
Podsumowując, wydaje się, że nikt nie robi tego, co robiłbym ręcznie.
bukzor
6
Było to dla mnie bardzo pomocne: git describe --all --exact-match 2>/dev/null | sed 's=.*/=='było dla mnie najlepszym rozwiązaniem (dobre nazwy dla tagów i główek gałęzi, brak wyjścia dla losowo odłączonych głów.
Alex Dupuy
1
Jednak właśnie odkryłem, że użycie git describema poważną wadę, gdy istnieje wiele gałęzi odwołujących się do tego samego zatwierdzenia, np. Zaraz po git checkout -b foonim - używa jednej z nich arbitralnie (wydaje się, że być może najnowszą). Zmienię strategię, aby używać filtrowanych danych wyjściowych git branchi używaj tylko git describewtedy, gdy wynikiem jest coś z odłączoną głową.
Alex Dupuy,
Właściwie muszę git branch --no-colorsię upewnić, że nazwa pliku jest wolna od irytujących kodów ucieczki terminala.
Alex Dupuy,
2
To bardzo mi pomogło więcej niż raz, dzięki za tak dokładne podejście!
Alice Purcell,
153

Od wersji 2.22 git można po prostu użyć:

git branch --show-current

Według strony podręcznika:

Wydrukuj nazwę bieżącego oddziału. W stanie odłączonym HEAD nic nie jest drukowane.

Max
źródło
2
Tak, mówiłem, że w marcu w komentarzach tej stronie: stackoverflow.com/questions/6245570/... . Oraz w stackoverflow.com/a/55088865/6309 .
VonC
5
Przynajmniej wspomnij, że to nie działa w stanie odłączonym HEAD. Właśnie straciłem godziny, żeby git 2.22 skompilował się za darmo ...
David Deprost,
136

Jeszcze jedna alternatywa:

git name-rev --name-only HEAD
Filip Spiridonov
źródło
można go również odzyskać za pomocąecho ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
Antoine
12
Nie działa, jeśli HEAD jest taki sam dla gałęzi master i feature (np. Podczas łączenia). Zwraca „master”, nawet jeśli jest wykonywane w gałęzi funkcji.
Orest Hera,
1
git checkout master && git name-rev --name-only HEAD # ac-187Nie działa zgodnie z oczekiwaniami
Alexander Abashkin
Zapisuję to w zmiennej tuż przed scaleniem, a także w przypadkach, gdy mój HEAD może zostać odłączony, jeśli kasuję określone zatwierdzenie. W takim przypadku działa to dobrze.
Ishaan Sejwal
4
Robię to z rurociągu Jenkinsa. Wydaje się, że na razie jest to najlepsza odpowiedź dla mnie. Robienie git branch --listtylko mówi * (HEAD detached at 7127db5). Robienie git rev-parse --abbrev-ref HEADtylko mówi HEADi tak dalej.
Mig82,
91

Cóż, dość proste, mam to w jednej wkładce (bash)

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

(kredyt: Ograniczone Zadośćuczynienie)

I kiedy tam jestem, jeden liniowiec, aby uzyskać oddział zdalnego śledzenia (jeśli istnieje)

git rev-parse --symbolic-full-name --abbrev-ref @{u}
Olivier Refalo
źródło
8
Za dużo cięć! :) sed -n 's/\* //p'załatwia sprawę. Chociaż dążę do paranoi, więc zakotwiczę ją sed -n 's/^\* //p'.
Mark Reed,
64

Możesz po prostu wpisać w wierszu poleceń (konsoli) w systemie Linux, w katalogu repozytorium:

$ git status

i zobaczysz tekst, między innymi coś podobnego do:

...
On branch master
...

co oznacza, że ​​jesteś obecnie w masteroddziale. Jeśli w tym momencie edytujesz dowolny plik, który znajduje się w tym samym lokalnym repozytorium (lokalny katalog zawierający pliki objęte zarządzaniem kontrolą wersji Git), edytujesz plik w tej gałęzi.

Tadeck
źródło
2
Na podstawie tego, co chcesz zrobić, możesz użyć git statusi uzyskać tylko pierwszy wiersz danych wyjściowych, z git status | head -1którym daje coś podobnego # On branch master. Jestem pewien, że różnice w wersjach również będą musiały zostać uwzględnione.
Joshua Pinter,
@JoshPinter: Możesz także użyć git status | grep 'On branch', co powinno mieć ten sam efekt (powinien, nie znaczy, że będzie, jeśli Twoja wersja Git wyświetla go inaczej). Lub git branch | grep '*', która pokaże nazwę gałęzi z gwiazdą na początku.
Tadeck
Tak, to również działa i może być bardziej elastyczne. Mój końcowy wynik za wyświetlenie tylko nazwy oddziału w aplikacji dla deweloperów Rails to:<tick>git status | head -1<tick>.gsub('# On branch ', '')
Joshua Pinter
1
git statuszwracanie wartości może zająć dużo czasu, jeśli zarządzanych jest wiele plików.
Tin Man
Tak, jeśli chcesz wydrukować gałąź na stronie internetowej, na przykład git statusmoże to zająć czas generowania całej strony.
Artem Russakovskii
36
git symbolic-ref -q --short HEAD

Używam tego w skryptach, które potrzebują bieżącej nazwy oddziału. Pokaże ci bieżące krótkie symboliczne odniesienie do HEAD, która będzie twoją obecną nazwą oddziału.

Kousha
źródło
1
Dzięki, działa świetnie! - Do tego dodaję również „-C ścieżka_do_foldera” w moim skrypcie.
Tony,
1
To dobre rozwiązanie, ponieważ z opcją -q zwraca kod błędu w stanie „odłączonej HEAD”, ale nic nie drukuje na stderr.
hallidave
to jedyne rozwiązanie, które zadziałało dla mnie na świeżym repo bez żadnych zobowiązań
kundasaba
26
git branch | grep -e "^*" | cut -d' ' -f 2

pokaże tylko nazwę oddziału

ungalcrys
źródło
Jeśli twoja gałąź pokazuje coś takiego „* (HEAD odłączony na SUM_BRANCH_01)”, spróbuj tego „git branch | grep -e" ^ * "| cut -d '' -f 5 | cut -d ')' -f 1 „
Dylan Kapp,
Właśnie utworzyłem ten sam skrypt, aby uzyskać bieżącą nazwę oddziału. Pomyślałem, że może to pomóc w różnicach.
tggagne
25

git branch pokaż tylko bieżącą nazwę oddziału.

Podczas gdy gałąź git wyświetli wszystkie gałęzie i podświetli obecną gwiazdkę, może być zbyt kłopotliwa podczas pracy z wieloma gałęziami.

Aby wyświetlić tylko gałąź, w której aktualnie jesteś, użyj:

git rev-parse --abbrev-ref HEAD
Lawrence Paje
źródło
to jest świetne dla ci i innych narzędzi do budowania!
phouse512,
najlepsza odpowiedź na użycie go w skrypcie
Ben Keil
1
@DylanNicholson git branch --containsczasami wymienia więcej niż jeden oddział.
Joe Chacko,
22

Znaleziono rozwiązanie wiersza polecenia o tej samej długości co Oliver Refalo , używając dobrego ol 'awk:

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

awkczyta to jako „zrób to w {}liniach pasujących do wyrażenia regularnego”. Domyślnie przyjmuje pola rozdzielane spacjami, więc drukujesz drugi. Jeśli możesz założyć, że tylko linia z twoim oddziałem ma *, możesz upuścić ^. Ach, bash golf!

Silas Barta
źródło
19
#!/bin/bash
function git.branch {
  br=`git branch | grep "*"`
  echo ${br/* /}
}
git.branch
Dziamid
źródło
18

Dlaczego nie skorzystać z powłoki powłoki git, która poda nazwę bieżącej gałęzi? git statuspomaga również.


Jak git-prompt.sh z contrib/prawda (git wersja 2.3.0), jak określono w __git_ps1funkcji pomocnika:

  1. Po pierwsze, nie jest przypadkiem szczególnym, jeśli rebase jest wykrywany w toku. Git używa nienazwanej gałęzi (odłączonej HEAD) podczas procesu zmiany bazy, aby uczynić ją atomową, a oryginalna gałąź jest zapisywana gdzie indziej.

  2. Jeśli .git/HEADplik jest dowiązaniem symbolicznym (bardzo rzadki przypadek ze starożytnej historii Gita), używagit symbolic-ref HEAD 2>/dev/null

  3. W przeciwnym razie czyta .git/HEADplik. Kolejne kroki zależą od jego zawartości:

    • Jeśli ten plik nie istnieje, to nie ma bieżącej gałęzi. Zwykle dzieje się tak, gdy repozytorium jest puste.

    • Jeśli zaczyna się od 'ref: 'przedrostka, to .git/HEADjest symref (odniesienie symboliczne), a my jesteśmy na normalnej gałęzi. Usuń ten prefiks, aby uzyskać pełną nazwę, i usuń, refs/heads/aby uzyskać krótką nazwę bieżącego oddziału:

      b="${head#ref: }"
      # ...
      b=${b##refs/heads/}
      
    • Jeśli nie zaczyna się 'ref: ', to zostaje odłączony HEAD (anonimowa gałąź), wskazując bezpośrednio na pewne zatwierdzenie. Służy git describe ...do zapisywania bieżącego zatwierdzenia w formie czytelnej dla człowieka.

Mam nadzieję że to pomogło.

Jakub Narębski
źródło
3
A jeśli opracowujesz podpowiedź powłoki dla gitów, której odpowiedzi tutaj powinieneś użyć? Żółwie do samego końca.
tripleee
1
@tripleee: Pożycz pomysły od github.com/git/git/blob/master/contrib/completion/git-prompt.sh
Jakub Narębski
4
Co do zapisu wydaje się działać, git describe --contains --all HEADczego obecnie nie widzę gdzie indziej na tej stronie. Jak zapewne wiesz, odpowiedzi typu link nie są zalecane w StackOverflow.
tripleee
2
@tripleee: Dodałem wyjaśnienie, jak to git-prompt.sh(aka __git_ps1) robi ...
Jakub Narębski
17

Mniej hałaśliwa wersja statusu git załatwi sprawę

git status -bsuno

Drukuje

## branch-name
dgolovin
źródło
1
## develop ... origin / develop
Kalpesh Soni
16

Przepraszam, to jest kolejna odpowiedź z wiersza poleceń, ale tego właśnie szukałem, kiedy znalazłem to pytanie i wiele z tych odpowiedzi było pomocnych. Moje rozwiązanie to następująca funkcja powłoki bash:

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

To zawsze powinno dać mi coś zarówno czytelnego dla człowieka, jak i bezpośredniego do wykorzystania jako argument git checkout.

  • w lokalnym oddziale: feature/HS-0001
  • na oznaczonym zatwierdzeniu (odłączony): v3.29.5
  • w zdalnej gałęzi (odłączony, nieoznaczony): SHA1
  • na każdym innym odłączonym zatwierdzeniu: SHA1
dmaestro12
źródło
1
Dzięki za opublikowanie tego, żadna z pozostałych odpowiedzi nie wydawała się troszczyć o to, aby zawsze produkować coś użytecznego jako argument git checkout.
zwolnienie
15

możesz użyć git bash na komendzie katalogu roboczego w następujący sposób

git status -b

powie ci, na której gałęzi jesteś, jest wiele poleceń, które są użyteczne, niektóre z nich

-s

--short Podaj dane wyjściowe w krótkim formacie.

-b --branch Pokazuje informacje o oddziale i śledzeniu, nawet w krótkim formacie.

--porcelain [=] Podaj dane wyjściowe w łatwym do przeanalizowania formacie dla skryptów. Jest to podobne do krótkiego wyjścia, ale pozostanie stabilne w wersjach Git i niezależnie od konfiguracji użytkownika. Szczegóły poniżej.

Parametr wersji służy do określenia wersji formatu. Jest to opcjonalne i domyślnie jest w oryginalnym formacie v1.

--long Podaj dane wyjściowe w formacie długim. To jest domyślne.

-v --verbose Oprócz nazw plików, które zostały zmienione, pokazują także zmiany tekstowe, które są wprowadzane do zatwierdzenia (tj. jak dane wyjściowe git diff --cached). Jeśli parametr -v zostanie podany dwukrotnie, pokaż również zmiany w działającym drzewie, które nie zostały jeszcze przemieszczone (tj. Jak dane wyjściowe git diff).

Prateek Gangwal
źródło
14
git status 

poda także nazwę oddziału wraz ze zmianami.

na przykład

>git status
On branch master // <-- branch name here
.....
Satheesh Kumar
źródło
13

Z czasem możemy mieć naprawdę długą listę oddziałów.

Chociaż niektóre inne rozwiązania są świetne, oto co robię (uproszczone z odpowiedzi Jacoba):

git branch | grep \*

Teraz,

git status

działa, ale tylko w przypadku jakichkolwiek lokalnych zmian

karthikr
źródło
13

Polecam użycie dowolnego z tych dwóch poleceń.

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

LUB

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

LUB (więcej informacji)

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

jackotonye
źródło
12

W Netbeans upewnij się, że adnotacje dotyczące wersji są włączone (Widok -> Pokaż etykiety wersji). Następnie możesz zobaczyć nazwę oddziału obok nazwy projektu.

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

Saroj
źródło
Po włączeniu adnotacji dotyczących wersji wystarczy najechać myszką na folder Projekt (lub Plik lub Ulubione), aby wyświetlić bieżącą gałąź.
idclaar
12

A co z tym?

{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
ShogunPanda
źródło
1
Znacznie lepsza odpowiedź, ponieważ dobrze radzi sobie z odłączoną obudową HEAD.
Pat
2
Wygląda na to, że powinieneś używać () a nie {} do zawijania poleceń git
Pat
@Pat Nie ma potrzeby tworzenia osobnej podpowłoki, tak jak zrobiłby to (). {} jest w porządku, z tym wyjątkiem, że musisz dodać; lub nowa linia przed}. W rzeczywistości możesz po prostu całkowicie zrezygnować z {}, chyba że będziesz musiał pogrupować polecenia.
aij
Czy symbolic-refczęść nie musi również --shortunikać prefiksu nazwy gałęzi refs/heads/?
rjp
11

Mam prosty skrypt o nazwie git-cbr( bieżąca gałąź ), który wypisuje nazwę bieżącej gałęzi.

#!/bin/bash

git branch | grep -e "^*"

Umieszczam ten skrypt w folderze niestandardowym ( ~/.bin). Folder jest w $PATH.

Więc teraz, gdy jestem w repozytorium git, po prostu piszę, git cbraby wydrukować bieżącą nazwę oddziału.

$ git cbr
* master

Działa to, ponieważ gitpolecenie przyjmuje swój pierwszy argument i próbuje uruchomić skrypt o nazwie git-arg1. Na przykład git branchpróbuje uruchomić skrypt o nazwie git-branchitp.

Diego Pino
źródło
11

Możesz na stałe skonfigurować wyjście bash, aby wyświetlało swoją nazwę git-branch. Jest to bardzo przydatne, gdy pracujesz z różnymi gałęziami, bez potrzeby ciągłego pisania $ git status. Github repo git-świadom-monit .

Otwórz terminal (ctrl-alt-t) i wprowadź polecenia

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

Edytuj .bashrc za pomocą sudo nano ~/.bashrcpolecenia (dla Ubuntu) i dodaj następujące na górze:

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

Następnie wklej 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\]\$ "

na końcu tego samego pliku, do którego wcześniej wkleiłeś kod instalacyjny. To da Ci pokolorowane wyjście:wprowadź opis zdjęcia tutaj

Kirill Zhuravlov
źródło
10

Następujące polecenie powłoki informuje gałąź, w której aktualnie się znajdujesz.

git branch | grep ^\*

Jeśli nie chcesz wpisywać tego długiego polecenia za każdym razem, gdy chcesz poznać gałąź i używasz Bash, nadaj temu poleceniu krótki alias, na przykład alias cb.

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

Gdy jesteś w oddziale głównym i pojawia się monit $, otrzymasz * masternastępujące informacje.

$ cb
* master
mrrusof
źródło
To nie daje odpowiedzi na pytanie. Aby skrytykować lub poprosić autora o wyjaśnienia, zostaw komentarz pod postem. - Z recenzji
Rashwan L
1
Dlaczego tak myślisz?
mrrusof
powinieneś skomentować i opisać swój post dla PO, w ten sposób łatwiej będzie zrozumieć Twój post.
Rashwan L
1
Ma sens.
mrrusof
1
jeśli używasz zsh, musisz zawrzeć wyrażenie grep w pojedynczych cudzysłowach:git branch | grep '^\*'
aaaarrgh
9

Zwraca nazwę gałęzi lub SHA1 po odłączeniu głowy:

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

To jest krótka wersja odpowiedzi @ dmaestro12 i bez obsługi tagów.

użytkownik
źródło
8
lepiej:git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
niebiesko
8

Jeśli naprawdę chcesz, aby ostatnia gałąź / tag została wypisana również w stanie odłączonym HEAD.

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

Aktualizacja Jest to przyjemniejsze, jeśli masz i nie boisz się awk.

git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
Ryan
źródło
rev | cut -d' ' -f1| revmożna uprościćawk '{print $NF}'
Steve Buzonas
1
Chociaż nie jest to również niezawodne, ponieważ można sprawdzić konkretną wersję za pomocą skrótu, dzięki czemu dziennik po prostu pokazuje, checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9że nadal jest to przydatna sztuczka, która może pomóc w jednoznacznym rozwiązaniu niektórych przypadków.
Alex Dupuy
1
Dalej skróć dogit reflog | awk '$3=="checkout:" {print $NF; exit}'
jthill
6

Wiem, że jest późno, ale na Linuksie / Macu z terminala można użyć następujących.

git status | sed -n 1p

Wyjaśnienie:

git status -> pobiera status działającego drzewa
sed -n 1p -> pobiera pierwszą linię z treści statusu

Odpowiedź na powyższe polecenie będzie wyglądać następująco:

"On branch your_branch_name"
pomijany
źródło
2
head -1zrobiłby to w zwykły sposób
bukzor
5

możesz również użyć zmiennej GIT_BRANCH, jak pokazano tutaj: https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

Wtyczka git ustawia kilka zmiennych środowiskowych, których możesz używać w swoich skryptach:

GIT_COMMIT - SHA prądu

GIT_BRANCH - nazwa aktualnie używanego oddziału, np. „Master” lub „origin / foo”

GIT_PREVIOUS_COMMIT - SHA poprzedniej wbudowanej zmiany z tej samej gałęzi (bieżąca SHA przy pierwszej kompilacji w gałęzi)

GIT_URL - zdalny adres URL repozytorium

GIT_URL_N - Zdalne adresy URL repozytorium, gdy jest więcej niż 1 piloty, np. GIT_URL_1, GIT_URL_2

GIT_AUTHOR_EMAIL - Adres e-mail osoby odpowiedzialnej / autora

GIT_COMMITTER_EMAIL - Adres e-mail osoby odpowiedzialnej / autora

użytkownik3405314
źródło
5

Dodaj go do PS1komputera Mac:

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

Przed uruchomieniem powyższego polecenia:

wprowadź opis zdjęcia tutaj

Po uruchomieniu tego polecenia:

wprowadź opis zdjęcia tutaj

Nie martw się, jeśli nie jest to repozytorium GIT, nie wyświetli błędu, z powodu [-d .git]którego sprawdza, czy .gitfolder istnieje, czy nie.

Abdennour TOUMI
źródło