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 git
bash nie ma problemu , mówi mi to, co robię.
git
branch
git-branch
mike628
źródło
źródło
.git/HEAD
, prawdopodobnie w katalogu nadrzędnymgit branch --show-current
. Zobacz moją odpowiedź tutaj .Odpowiedzi:
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:
źródło
git checkout --orphan foo
wtedygit branch
nie udało się wyświetlić gałęzifoo
. Podczas gdygit symbolic-ref HEAD
jak sugerowano, zadziałała inna odpowiedź.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:
Odniesienie:
źródło
git branch
pokazuje* (no branch)
, co jest również bezużyteczne ...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.Masz również,
git symbolic-ref HEAD
któ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):
W Git v1.7 + możesz także:
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ć.
źródło
git rev-parse --abbrev-ref HEAD
pokazuje,HEAD
kiedy jesteś na głowie.git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
ponieważ wyświetli ciąg znaków jakHEAD detached at a63917f
w stanie odłączonym, w przeciwieństwie do innych odpowiedzi, które nie pokazują nic lub HEAD. To jest ważne.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):
Wyniki:
git branch | sed -n '/\* /s///p'
master
(detached from origin/master)
(detached from origin/feature-foo)
(detached from v1.2.3)
(HEAD detached at 285f294)
(detached from 285f294)
git status | head -1
# On branch master
# HEAD detached at origin/master
# HEAD detached at origin/feature-foo
# HEAD detached at v1.2.3
# HEAD detached at 285f294
# HEAD detached at 285f294
git describe --all
heads/master
heads/master
(uwaga: nieremotes/origin/master
)remotes/origin/feature-foo
v1.2.3
remotes/origin/HEAD
v1.0.6-5-g2393761
cat .git/HEAD
:ref: refs/heads/master
cat: .git/HEAD: Not a directory
git rev-parse --abbrev-ref HEAD
master
HEAD
git symbolic-ref --short HEAD
master
fatal: ref HEAD is not a symbolic ref
(FYI dokonano tego w wersji git 1.8.3.1)
źródło
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.git describe
ma poważną wadę, gdy istnieje wiele gałęzi odwołujących się do tego samego zatwierdzenia, np. Zaraz pogit checkout -b foo
nim - używa jednej z nich arbitralnie (wydaje się, że być może najnowszą). Zmienię strategię, aby używać filtrowanych danych wyjściowychgit branch
i używaj tylkogit describe
wtedy, gdy wynikiem jest coś z odłączoną głową.git branch --no-color
się upewnić, że nazwa pliku jest wolna od irytujących kodów ucieczki terminala.Od wersji 2.22 git można po prostu użyć:
Według strony podręcznika:
źródło
Jeszcze jedna alternatywa:
źródło
echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
git checkout master && git name-rev --name-only HEAD # ac-187
Nie działa zgodnie z oczekiwaniamigit branch --list
tylko mówi* (HEAD detached at 7127db5)
. Robieniegit rev-parse --abbrev-ref HEAD
tylko mówiHEAD
i tak dalej.Cóż, dość proste, mam to w jednej wkładce (bash)
(kredyt: Ograniczone Zadośćuczynienie)
I kiedy tam jestem, jeden liniowiec, aby uzyskać oddział zdalnego śledzenia (jeśli istnieje)
źródło
sed -n 's/\* //p'
załatwia sprawę. Chociaż dążę do paranoi, więc zakotwiczę jąsed -n 's/^\* //p'
.Możesz po prostu wpisać w wierszu poleceń (konsoli) w systemie Linux, w katalogu repozytorium:
i zobaczysz tekst, między innymi coś podobnego do:
co oznacza, że jesteś obecnie w
master
oddziale. 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.źródło
git status
i uzyskać tylko pierwszy wiersz danych wyjściowych, zgit status | head -1
którym daje coś podobnego# On branch master
. Jestem pewien, że różnice w wersjach również będą musiały zostać uwzględnione.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). Lubgit branch | grep '*'
, która pokaże nazwę gałęzi z gwiazdą na początku.<tick>git status | head -1<tick>.gsub('# On branch ', '')
git status
zwracanie wartości może zająć dużo czasu, jeśli zarządzanych jest wiele plików.git status
może to zająć czas generowania całej strony.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.
źródło
pokaże tylko nazwę oddziału
źródło
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:
źródło
git branch --contains
czasami wymienia więcej niż jeden oddział.Znaleziono rozwiązanie wiersza polecenia o tej samej długości co Oliver Refalo , używając dobrego ol 'awk:
awk
czyta 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!źródło
źródło
Dlaczego nie skorzystać z powłoki powłoki git, która poda nazwę bieżącej gałęzi?
git status
pomaga również.Jak git-prompt.sh z
contrib/
prawda (git wersja 2.3.0), jak określono w__git_ps1
funkcji pomocnika: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.
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 czyta
.git/HEAD
plik. 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/HEAD
jest 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:Jeśli nie zaczyna się
'ref: '
, to zostaje odłączony HEAD (anonimowa gałąź), wskazując bezpośrednio na pewne zatwierdzenie. Służygit describe ...
do zapisywania bieżącego zatwierdzenia w formie czytelnej dla człowieka.Mam nadzieję że to pomogło.
źródło
git describe --contains --all HEAD
czego obecnie nie widzę gdzie indziej na tej stronie. Jak zapewne wiesz, odpowiedzi typu link nie są zalecane w StackOverflow.git-prompt.sh
(aka__git_ps1
) robi ...Mniej hałaśliwa wersja statusu git załatwi sprawę
Drukuje
źródło
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:
To zawsze powinno dać mi coś zarówno czytelnego dla człowieka, jak i bezpośredniego do wykorzystania jako argument
git checkout
.feature/HS-0001
v3.29.5
źródło
git checkout
.możesz użyć git bash na komendzie katalogu roboczego w następujący sposób
powie ci, na której gałęzi jesteś, jest wiele poleceń, które są użyteczne, niektóre z nich
--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).
źródło
poda także nazwę oddziału wraz ze zmianami.
na przykład
źródło
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):
Teraz,
działa, ale tylko w przypadku jakichkolwiek lokalnych zmian
źródło
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
źródło
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
źródło
A co z tym?
źródło
symbolic-ref
część nie musi również--short
unikać prefiksu nazwy gałęzirefs/heads/
?Mam prosty skrypt o nazwie
git-cbr
( bieżąca gałąź ), który wypisuje nazwę bieżącej gałęzi.Umieszczam ten skrypt w folderze niestandardowym (
~/.bin
). Folder jest w$PATH
.Więc teraz, gdy jestem w repozytorium git, po prostu piszę,
git cbr
aby wydrukować bieżącą nazwę oddziału.Działa to, ponieważ
git
polecenie przyjmuje swój pierwszy argument i próbuje uruchomić skrypt o nazwiegit-arg1
. Na przykładgit branch
próbuje uruchomić skrypt o nazwiegit-branch
itp.źródło
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
Edytuj .bashrc za pomocą
sudo nano ~/.bashrc
polecenia (dla Ubuntu) i dodaj następujące na górze:Następnie wklej kod
na końcu tego samego pliku, do którego wcześniej wkleiłeś kod instalacyjny. To da Ci pokolorowane wyjście:
źródło
Następujące polecenie powłoki informuje gałąź, w której aktualnie się znajdujesz.
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
.Gdy jesteś w oddziale głównym i pojawia się monit
$
, otrzymasz* master
następujące informacje.źródło
git branch | grep '^\*'
Zwraca nazwę gałęzi lub SHA1 po odłączeniu głowy:
To jest krótka wersja odpowiedzi @ dmaestro12 i bez obsługi tagów.
źródło
git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
Jeśli naprawdę chcesz, aby ostatnia gałąź / tag została wypisana również w stanie odłączonym HEAD.
Aktualizacja Jest to przyjemniejsze, jeśli masz i nie boisz się awk.
źródło
rev | cut -d' ' -f1| rev
można uprościćawk '{print $NF}'
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.git reflog | awk '$3=="checkout:" {print $NF; exit}'
Wiem, że jest późno, ale na Linuksie / Macu z terminala można użyć następujących.
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:
źródło
head -1
zrobiłby to w zwykły sposóbmoż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
źródło
Dodaj go do
PS1
komputera Mac:Przed uruchomieniem powyższego polecenia:
Po uruchomieniu tego polecenia:
Nie martw się, jeśli nie jest to repozytorium GIT, nie wyświetli błędu, z powodu
[-d .git]
którego sprawdza, czy.git
folder istnieje, czy nie.źródło