Jak uzyskać bieżącą nazwę gałęzi w Git?

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

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

Nie ma problemu z git w bashu, mówi mi co robię.

Author: Kay V, 2011-06-06

30 answers

git branch

Powinien pokazać wszystkie lokalne oddziały twojego repo. Rozgałęziona gałąź to twoja obecna gałąź.

Jeśli chcesz odzyskać tylko nazwę gałęzi, na której się znajdujesz, możesz to zrobić:

git branch | grep \* | cut -d ' ' -f2
 1358
Author: roberttdev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-21 10:32:10
git rev-parse --abbrev-ref HEAD --

Który wyświetli bieżącą gałąź.

Odniesienie:

 3721
Author: Jistanidiot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-05 17:21:52

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

Aby pokazać tylko nazwę gałęzi w Git v1.8 i późniejszych (podziękowania dla Grega za zwrócenie na to uwagi):

$ git symbolic-ref --short HEAD

Na Git v1. 7 + Możesz również zrobić:

$ git rev-parse --abbrev-ref HEAD

Oba powinny dać tę samą nazwę gałęzi, jeśli jesteś na gałęzi. Jeśli jesteś na odłączonej głowie odpowiedzi różnią się.

Uwaga:

Na wcześniejszym kliencie to chyba działa:

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

Darien 26. Mar 2014

 420
Author: Wernight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-30 13:49:34

Dla własnego odniesienia (ale może to być przydatne dla innych) zrobiłem przegląd większości (podstawowej linii poleceń) technik wymienionych w tym wątku, każda zastosowana do kilku przypadków użycia: HEAD is (wskazując na):

  • lokalny oddział (master)
  • W 2007 roku, po raz pierwszy na rynku pojawiła się wersja 1.000.000.000.000.000.000.]} W 2007 roku firma została założona przez firmę Microsoft, która od 2007 roku zajmuje się dystrybucją i dystrybucją sprzętu komputerowego.]}
  • tag (v1.2.3)
  • ogólne Głowa (żaden z powyższych)

Wyniki:

  • git branch | sed -n '/\* /s///p'
    • oddział lokalny: master
    • zdalna gałąź śledzenia (zsynchronizowana): (detached from origin/master)
    • zdalna gałąź śledzenia (nie zsynchronizowana): (detached from origin/feature-foo)
    • tag: (detached from v1.2.3)
    • ogólne: (detached from 285f294)
  • git status | head -1
    • oddział lokalny: # On branch master
    • zdalna gałąź śledzenia (zsynchronizowana): # HEAD detached at origin/master
    • zdalna gałąź śledzenia (nie zsynchronizowana): # HEAD detached at origin/feature-foo
    • tag: # HEAD detached at v1.2.3
    • ogólne: # HEAD detached at 285f294
  • git describe --all
    • oddział lokalny: heads/master
    • remote tracking branch (in sync): heads/master (note: not remotes/origin/master)
    • zdalna gałąź śledzenia (nie zsynchronizowana): remotes/origin/feature-foo
    • tag: v1.2.3
    • ogólne: v1.0.6-5-g2393761
  • cat .git/HEAD:
    • oddział lokalny: ref: refs/heads/master
    • wszystkie inne przypadki użycia: SHA odpowiednich commit
  • git rev-parse --abbrev-ref HEAD
    • oddział lokalny: master
    • wszystkie inne przypadki użycia: HEAD
  • git symbolic-ref --short HEAD
    • oddział lokalny: master
    • wszystkie inne przypadki użycia: fatal: ref HEAD is not a symbolic ref

(FYI to było zrobione z git Wersja 1.8.3.1)

 171
Author: Stefaan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-25 08:53:30

Jeszcze jedna alternatywa:

git name-rev --name-only HEAD
 120
Author: Filip Spiridonov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-02 19:17:08

Cóż dość proste, mam go w jednym linerze (bash)

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

(kredyt: ograniczona Pokuta)

I kiedy tam jestem, jedna liner, aby uzyskać gałąź zdalnego śledzenia (jeśli istnieje)

git rev-parse --symbolic-full-name --abbrev-ref @{u}
 88
Author: Olivier Refalo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-18 20:09:47

Możesz po prostu wpisać w wierszu poleceń (konsola) na Linuksie, w katalogu repozytorium:

$ git status

I zobaczysz jakiś tekst, wśród których coś podobnego do:

...
On branch master
...

Co oznacza, że aktualnie jesteś na master branch. Jeśli edytujesz dowolny plik w danym momencie i znajduje się on w tym samym lokalnym repozytorium (lokalny katalog zawierający pliki znajdujące się pod kontrolą wersji Git), edytujesz plik w tej gałęzi.

 51
Author: Tadeck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-05 20:31:31
git symbolic-ref -q --short HEAD

Używam tego w skryptach, które wymagają bieżącej nazwy gałęzi. Wyświetli Ci bieżące krótkie symboliczne odniesienie do HEAD, które będzie Twoją bieżącą nazwą gałęzi.

 26
Author: Kousha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-02 22:09:51
git branch | grep -e "^*" | cut -d' ' -f 2

Wyświetli tylko nazwę gałęzi

 24
Author: ungalcrys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-14 13:08:32

Znaleziono rozwiązanie linii poleceń o tej samej długości co Oliver Refalo ' s , używając starego dobrego awk:

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

awk odczytuje to jako "rób rzeczy w {} na liniach pasujących do regex". Domyślnie przyjmuje pola rozdzielane białymi znakami, więc drukuje się drugie. Jeśli możesz założyć, że tylko linia z Twoją gałęzią ma*, możesz upuścić ^. Bash golf!

 21
Author: Silas Barta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:45

git branch pokazuje tylko bieżącą nazwę gałęzi.

Podczas gdy Git branch pokaże Ci wszystkie gałęzie i podświetli bieżącą z gwiazdką, może to być zbyt uciążliwe podczas pracy z wieloma gałęziami.

Aby pokazać tylko gałąź, na której aktualnie się znajdujesz, użyj:

git rev-parse --abbrev-ref HEAD
 19
Author: Lawrence Paje,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-25 05:33:58
#!/bin/bash
function git.branch {
  br=`git branch | grep "*"`
  echo ${br/* /}
}
git.branch
 16
Author: Dziamid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-23 17:11:04

Dlaczego nie użyć Git-aware Shell prompt, który powie Ci nazwę bieżącej gałęzi? Również pomaga.


Jak git-prompt.sh from contrib/ does it (git version 2.3.0), as defined in __git_ps1 helper function:

  1. Po pierwsze, istnieje specjalny przypadek, jeśli rebase jest w toku. Git używa nienazwanej gałęzi (odłączonej głowicy) podczas procesu rebase, aby uczynić ją atomową, a oryginalna gałąź jest zapisywana gdzie indziej.

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

  3. W Przeciwnym Razie odczytuje .git/HEAD Plik. Kolejne kroki zależą od jego zawartości:

    • Jeżeli ten plik nie istnieje, wtedy nie ma bieżącej gałęzi. Zwykle dzieje się tak, gdy repozytorium jest nagie.

    • Jeśli zaczyna się od prefiksu 'ref: ', to {[4] } jest symref( Referencja symboliczna) i jesteśmy na normalnej gałęzi. Usuń ten prefiks, aby uzyskać pełną nazwę, i usuń refs/heads/ aby uzyskać skróconą nazwę bieżącej gałęzi:

      b="${head#ref: }"
      # ...
      b=${b##refs/heads/}
      
    • Jeśli nie zaczyna się od 'ref: ', to jest to oddzielona Głowica (anonimowa gałąź), wskazująca bezpośrednio na jakiś commit. Użyj git describe ..., aby zapisać bieżący commit w formie czytelnej dla człowieka.

Mam nadzieję, że to pomoże.
 15
Author: Jakub Narębski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-20 17:51:04

Możesz użyć git bash w katalogu roboczym polecenie jest następujące

git status -b

Powie ci, na której gałęzi jesteś istnieje wiele poleceń, które są przydatne niektóre z nich to

-s

--short Podaj wynik w krótkim formacie.

-b -- oddział Pokaż informacje o gałęzi i śledzeniu nawet w krótkim formacie.

--Porcelana [=] Daj wyjście w łatwym do przetworzenia formacie dla skryptów. Jest to podobne do krótkiego wyjścia, ale pozostanie stabilne w Git wersje i niezależnie od konfiguracji użytkownika. Szczegóły poniżej.

Parametr version jest używany do określenia wersji formatu. Jest to opcjonalne i domyślnie jest to format oryginalnej wersji v1.

--long Daj wyjście w długim formacie. Jest to wartość domyślna.

- v -- verbose Oprócz nazw plików, które zostały zmienione, Pokaż również zmiany tekstowe, które są wystawiane do zatwierdzenia (np. wyjście git diff --cached). Jeśli -v jest podane dwukrotnie, następnie Pokaż również zmiany w drzewie roboczym, które nie zostały jeszcze wystawione (np. jak wyjście git diff).

 14
Author: Prateek Gangwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-08 12:19:10

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

Podczas gdy niektóre inne rozwiązania są świetne, oto co robię (uproszczone z odpowiedzi Jakuba):

git branch | grep \*

Teraz,

git status

Działa, ale tylko jeśli są jakieś lokalne zmiany

 12
Author: karthikr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-11 20:41:19

Zalecam użycie któregokolwiek z tych dwóch poleceń.

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

Lub

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

OR (more verbose)

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

 12
Author: jackotonye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-29 14:12:33

W Netbeans upewnij się, że adnotacje dotyczące wersjonowania są włączone (Widok - > Pokaż wersjonowanie Etykiety). Następnie możesz zobaczyć nazwę gałęzi obok nazwy projektu.

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

 11
Author: Saroj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-09 16:10:44

Mniej hałaśliwa wersja dla Git status załatwiłaby sprawę

git status -bsuno

Drukuje

## branch-name
 11
Author: dgolovin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-21 23:55:06

A co z tym?

{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
 10
Author: ShogunPanda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-11 17:29:29

Przepraszam, że to kolejna odpowiedź wiersza poleceń, ale właśnie tego szukałem, gdy znalazłem to pytanie i wiele z tych odpowiedzi było pomocnych. Moim rozwiązaniem jest 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średnio użytecznego jako argument do git checkout.

  • na lokalnym oddziale: feature/HS-0001
  • on a tagged commit (detergent): v3.29.5
  • na zdalnym oddziale (odłączony, nie oznaczony): SHA1
  • na innych oddzielny commit: SHA1
 10
Author: dmaestro12,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-08 16:06:03

Mam prosty skrypt o nazwie git-cbr (bieżąca gałąź ), która wyświetla bieżącą nazwę gałęzi.

#!/bin/bash

git branch | grep -e "^*"

Umieszczam ten skrypt w niestandardowym folderze (~/.bin). Folder znajduje się w $PATH.

Więc teraz, kiedy jestem w repo git, po prostu wpisuję git cbr aby wydrukować bieżącą nazwę gałęzi.

$ git cbr
* master

Działa to, ponieważ polecenie {[6] } pobiera swój pierwszy argument i próbuje uruchomić skrypt o nazwie git-arg1. Na przykład git branch próbuje uruchomić skrypt nazwane git-branch, itp.

 9
Author: Diego Pino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-03 17:47:25

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

git branch | grep ^\*

Jeśli nie chcesz wpisywać tego długiego polecenia za każdym razem, gdy chcesz znać gałąź i używasz Basha, podaj komendzie krótki alias, na przykład alias cb, w ten sposób.

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

Kiedy jesteś w Branch master i twój znak zachęty to $, otrzymasz * master w następujący sposób.

$ cb
* master
 9
Author: mrrusof,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-16 21:54:33

Możesz na stałe skonfigurować wyjście bash tak, aby pokazywało Twoją nazwę Git-branch. Jest bardzo przydatny podczas pracy z różnymi gałęziami, nie ma potrzeby wpisywania $ git status przez cały czas. Github repo git-aware-prompt .

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

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

Edytuj swój .bashrc za pomocą polecenia sudo nano ~/.bashrc (Dla Ubuntu) i dodać do góry:

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, który wkleiłeś kod instalacyjny do wcześniej. Dzięki temu uzyskasz kolorowy wynik:Tutaj wpisz opis obrazka

 8
Author: Kirill Zhuravlov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-03 18:39:35

Jeśli naprawdę chcesz, aby ostatnia gałąź/tag została sprawdzona również w stanie odłączonej głowy.

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

Update To jest milsze, jeśli masz i nie boisz się awk.

git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
 7
Author: Ryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-29 23:56:53

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

git status | sed -n 1p

Wyjaśnienie:

Git status - > pobiera status drzewa roboczego
sed-N 1P - > pobiera pierwszą linię z ciała statusu

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

"On branch your_branch_name"
 5
Author: skippy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-20 22:41:37

Zwraca nazwę gałęzi lub SHA1, gdy na odłączonej głowicy:

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

Jest to krótka wersja odpowiedzi @dmaestro12 i bez obsługi tagów.

 5
Author: user,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-17 20:30:02

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

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

GIT_COMMIT-SHA bieżącego

GIT_BRANCH-nazwa aktualnie używanej gałęzi, np. "master" lub "origin / foo"

GIT_PREVIOUS_COMMIT - SHA poprzedniego zbudowanego commita z tej samej gałęzi (bieżącego SHA przy pierwszym zbudowaniu branch)

GIT_URL-repozytorium remote URL

GIT_URL_N - zdalne adresy URL repozytorium, gdy jest więcej niż 1 pilotów, np. GIT_URL_1, GIT_URL_2

GIT_AUTHOR_EMAIL-commit/Author Email

GIT_COMMITTER_EMAIL-Committer/Author Email

 4
Author: user3405314,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-11 09:08:03

Dodaj go do PS1 używając Mac:

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

Przed uruchomieniem powyższego polecenia:

Tutaj wpisz opis obrazka

Po uruchomieniu tej komendy:

Tutaj wpisz opis obrazka

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

 4
Author: Abdennour TOUMI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-31 06:56:02
git status 

Poda również nazwę gałęzi wraz ze zmianami.

Np.

>git status
On branch master // <-- branch name here
.....
 4
Author: Satheesh Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-13 00:10:59
git branch | grep "*" | sed "s/* //" | awk '{printf $0}' | pbcopy

Aby bezpośrednio skopiować wynik do tablicy. Dzięki @ olivier-refalo na początek ...

 2
Author: SushiGrass Jacob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-26 19:55:57