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ę.
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
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:
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
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)
- oddział lokalny:
-
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
- oddział lokalny:
-
git describe --all
- oddział lokalny:
heads/master
- remote tracking branch (in sync):
heads/master
(note: notremotes/origin/master
) - zdalna gałąź śledzenia (nie zsynchronizowana):
remotes/origin/feature-foo
- tag:
v1.2.3
- ogólne:
v1.0.6-5-g2393761
- oddział lokalny:
-
cat .git/HEAD
:- oddział lokalny:
ref: refs/heads/master
- wszystkie inne przypadki użycia: SHA odpowiednich commit
- oddział lokalny:
-
git rev-parse --abbrev-ref HEAD
- oddział lokalny:
master
- wszystkie inne przypadki użycia:
HEAD
- oddział lokalny:
-
git symbolic-ref --short HEAD
- oddział lokalny:
master
- wszystkie inne przypadki użycia:
fatal: ref HEAD is not a symbolic ref
- oddział lokalny:
(FYI to było zrobione z git Wersja 1.8.3.1)
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
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}
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.
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.
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
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!
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
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
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:
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.
Jeśli
.git/HEAD
Plik jest dowiązaniem symbolicznym( bardzo rzadki przypadek ze starożytnej historii Gita), używagit symbolic-ref HEAD 2>/dev/null
-
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żyjgit describe ...
, aby zapisać bieżący commit w formie czytelnej dla człowieka.
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).
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
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
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.
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
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/##"
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
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.
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
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:
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}'
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"
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.
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
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:
Po uruchomieniu tej komendy:
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.
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
.....
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 ...
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