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ę.


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



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

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:


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


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)


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.


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

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}

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.


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.


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


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

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!


19
#!/bin/bash
function git.branch {
  br=`git branch | grep "*"`
  echo ${br/* /}
}
git.branch

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.


3
A jeśli opracowujesz podpowiedź powłoki dla gitów, której odpowiedzi tutaj powinieneś użyć? Żółwie do samego końca.
— tripleee


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

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

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).


14
git status 

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

na przykład

>git status
On branch master // <-- branch name here
.....

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


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


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


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/##"

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.


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


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

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.


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}'

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"

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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.