Ik heb een Subversion-achtergrond en toen ik een branch had, wist ik waar ik aan werkte met “Deze werkbestanden wijzen naar deze branch”.
Maar met Git weet ik niet zeker of ik een bestand aan het bewerken ben in NetBeans of Notepad++, of het aan de master of een andere branch is gekoppeld.
Er is geen probleem met git
in bash, het vertelt me wat ik aan het doen ben.
Antwoord 1, autoriteit 100%
git branch
zou alle lokale vestigingen van uw repo moeten tonen. De vertakking met ster is je huidige vertakking.
Als u alleen de naam van het filiaal wilt ophalen, kunt u het volgende doen:
git rev-parse --abbrev-ref HEAD
of met Git 2.22 en hoger:
git branch --show-current
Antwoord 2, autoriteit 92%
Als u de huidige vestiging waarin u zich bevindt wilt weergeven, zonder dat de andere vestigingen worden vermeld, kunt u het volgende doen:
git rev-parse --abbrev-ref HEAD
Referentie:
Antwoord 3, autoriteit 18%
Je hebt ook git symbolic-ref HEAD
die de volledige refspec weergeeft.
Om alleen de branchnaam in Git v1.8 en later te tonen (met dank aan Greg voor het erop wijzen):
git symbolic-ref --short HEAD
Op Git v1.7+ kun je ook het volgende doen:
git rev-parse --abbrev-ref HEAD
Beide zouden dezelfde branchnaam moeten hebben als je in een branch zit. Als je een afstandelijk hoofd hebt, verschillen de antwoorden.
Opmerking:
Op een eerdere client lijkt dit te werken:
git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
– Darien 26. maart 2014
Antwoord 4, autoriteit 9%
Voor mijn eigen referentie (maar het kan nuttig zijn voor anderen) heb ik een overzicht gemaakt van de meeste (basisopdrachtregel) technieken die in deze thread worden genoemd, elk toegepast op verschillende gebruiksgevallen: HEAD is (wijzend naar):
- lokale branch (master)
- remote tracking branch, synchroon met lokale branch (oorsprong/master op dezelfde commit als master)
- vertakking voor volgen op afstand, niet synchroon met een lokale vertakking (origin/feature-foo)
- tag (v1.2.3)
- submodule (wordt uitgevoerd in de submodule-directory)
- algemeen vrijstaand hoofd (geen van bovenstaande)
Resultaten:
git branch | sed -n '/\* /s///p'
- lokale tak:
master
- vertakking voor externe tracking (gesynchroniseerd):
(detached from origin/master)
- vertakking voor externe tracking (niet synchroon):
(detached from origin/feature-foo)
- tag:
(detached from v1.2.3)
- submodule:
(HEAD detached at 285f294)
- algemeen vrijstaand hoofd:
(detached from 285f294)
- lokale tak:
git status | head -1
- lokale vertakking:
# On branch master
- vertakking voor externe tracking (gesynchroniseerd):
# HEAD detached at origin/master
- vertakking voor volgen op afstand (niet synchroon):
# HEAD detached at origin/feature-foo
- tag:
# HEAD detached at v1.2.3
- submodule:
# HEAD detached at 285f294
- algemeen losgemaakt hoofd:
# HEAD detached at 285f294
- lokale vertakking:
git describe --all
- lokale tak:
heads/master
- remote tracking branch (synchroon):
heads/master
(opmerking: nietremotes/origin/master
) - Remote Tracking Branch (niet in synchronisatie):
remotes/origin/feature-foo
- TAG:
v1.2.3
- Submodule:
remotes/origin/HEAD
- Algemeen Vrijstaand hoofd:
v1.0.6-5-g2393761
- lokale tak:
cat .git/HEAD
:- Lokale branche:
ref: refs/heads/master
- Submodule:
cat: .git/HEAD: Not a directory
- Alle andere gebruiksgevallen: SHA van de overeenkomstige commit
- Lokale branche:
git rev-parse --abbrev-ref HEAD
- Lokale branch:
master
- alle andere gebruiksgevallen:
HEAD
- Lokale branch:
git symbolic-ref --short HEAD
- Lokale branch:
master
- Alle andere gebruiksgevallen:
fatal: ref HEAD is not a symbolic ref
- Lokale branch:
(FYI Dit is gedaan met GIT-versie 1.8.3.1)
Antwoord 5, Autoriteit 7%
Vanaf versie 2.22 van GIT kunt u gewoon gebruiken:
git branch --show-current
Per man-pagina:
Druk de naam van de huidige tak af. In de vrijstaande kopstaat wordt er niets afgedrukt.
Antwoord 6, Autoriteit 4%
Nog een ander alternatief:
git name-rev --name-only HEAD
Antwoord 7, Autoriteit 3%
Goed genoeg, ik heb het in een voering (bash)
git branch | sed -n '/\* /s///p'
(tegoed: beperkte verzoening)
En terwijl ik daar ben, de ene voering om de afstandsbediening (indien aanwezig)
te krijgen
git rev-parse --symbolic-full-name --abbrev-ref @{u}
Antwoord 8, Autoriteit 2%
U kunt gewoon in opdrachtregel (console) typen op Linux, in de repository-directory:
$ git status
en je zult wat tekst zien, waaronder iets dat lijkt op:
...
On branch master
...
wat betekent dat je momenteel in de master
branch zit. Als je op dat moment een bestand aan het bewerken bent en het bevindt zich in dezelfde lokale repository (lokale map met de bestanden die onder Git versiebeheerbeheer vallen), dan ben je het bestand aan het bewerken in deze branch.
Antwoord 9
git symbolic-ref -q --short HEAD
Ik gebruik dit in scripts die de huidige branchnaam nodig hebben. Het zal je de huidige korte symbolische verwijzing naar HEAD tonen, wat je huidige filiaalnaam zal zijn.
Antwoord 10
git branch | grep -e "^*" | cut -d' ' -f 2
geeft alleen de filiaalnaam weer
Antwoord 11
git branch
laat alleen de huidige branchnaam zien.
Hoewel git branch je alle branches laat zien en de huidige markeert met een asterisk, kan het te omslachtig zijn als je met veel branches werkt.
Om alleen het filiaal te tonen waar u zich momenteel bevindt, gebruikt u:
git rev-parse --abbrev-ref HEAD
Antwoord 12
Ik heb een opdrachtregeloplossing gevonden van dezelfde lengte als Oliver Refalo’s, met behulp van good ol’ awk:
git branch | awk '/^\*/{print $2}'
awk
leest dat als “doe de dingen in {}
op regels die overeenkomen met de regex”. Standaard wordt uitgegaan van door witruimte gescheiden velden, dus u drukt de tweede af. Als je kunt aannemen dat alleen de regel met je branch de * heeft, kun je de ^ laten vallen. Ah, bash golf!
Antwoord 13
#!/bin/bash
function git.branch {
br=`git branch | grep "*"`
echo ${br/* /}
}
git.branch
Antwoord 14
Waarom gebruik je geen git-aware shell-prompt, die je de naam van de huidige branch zou vertellen? git status
helpt ook.
Hoe git-prompt.shvan contrib/
doet het (git versie 2.3.0), zoals gedefinieerd in __git_ps1
helperfunctie:
-
Ten eerste is er een speciaal geval als rebasein uitvoering wordt gedetecteerd. Git gebruikt een niet nader genoemde branch (detached HEAD) tijdens het rebase proces om het atomair te maken, en de originele branch wordt ergens anders opgeslagen.
-
Als het
.git/HEAD
bestand een symbolische link is (een zeer zeldzaam geval, uit de oude geschiedenis van Git), gebruikt hetgit symbolic-ref HEAD 2>/dev/null
-
Anders wordt het bestand
.git/HEAD
gelezen. De volgende stappen zijn afhankelijk van de inhoud:-
Als dit bestand niet bestaat, is er geen huidige branch. Dit gebeurt meestal als de repository leeg is.
-
Als het begint met het voorvoegsel
'ref: '
, dan is.git/HEAD
symref (symbolische verwijzing), en zitten we op de normale tak. Verwijder dit voorvoegsel om de volledige naam te krijgen, en verwijderrefs/heads/
om de korte naam van de huidige tak te krijgen:b="${head#ref: }" # ... b=${b##refs/heads/}
-
Als het niet begint met
'ref: '
, dan is het detached HEAD (anonieme branch), die direct naar een commit verwijst. Gebruikgit describe ...
om de huidige commit in voor mensen leesbare vorm te schrijven.
-
Ik hoop dat dat helpt.
Antwoord 15
Een minder luidruchtige versie voor git-status zou voldoende zijn
git status -bsuno
Het wordt afgedrukt
## branch-name
Antwoord 16
Sorry, dit is weer een antwoord via de opdrachtregel, maar daar was ik naar op zoek toen ik deze vraag vond en veel van deze antwoorden waren nuttig. Mijn oplossing is de volgende bash shell-functie:
get_branch () {
git rev-parse --abbrev-ref HEAD | grep -v HEAD || \
git describe --exact-match HEAD 2> /dev/null || \
git rev-parse HEAD
}
Dit zou me altijd iets moeten geven dat zowel voor mensen leesbaar als direct bruikbaar is als argument voor git checkout
.
- op een lokaal filiaal:
feature/HS-0001
- op een getagde commit (losgemaakt):
v3.29.5
- op een externe tak (vrijstaand, niet getagd): SHA1
- op elke andere losgemaakte commit: SHA1
Antwoord 17
je kunt git bash gebruiken in de werkmap
commando is als volgt
git status -b
het zal u vertellen op welk filiaal u zich bevindt
er zijn veel commando’s die nuttig zijn, sommige zijn
-s
–kort
Geef de uitvoer in het korte formaat.
-b
–tak
Toon de filiaal- en trackinginformatie, zelfs in kort formaat.
–porselein[=]
Geef de uitvoer in een gemakkelijk te ontleden formaat voor scripts. Dit is vergelijkbaar met de korte uitvoer, maar blijft stabiel in Git-versies en ongeacht de gebruikersconfiguratie. Zie hieronder voor details.
De versieparameter wordt gebruikt om de formaatversie op te geven. Dit is optioneel en standaard ingesteld op de oorspronkelijke versie v1-indeling.
–lang
Geef de uitvoer in het lange formaat. Dit is de standaardinstelling.
-v
–uitgebreid
Naast de namen van bestanden die zijn gewijzigd, tonen ook de tekstuele wijzigingen die worden geënsceneerd om te worden gepleegd (d.w.z., zoals de uitvoer van Git Diff-Cached). Als -V wordt twee keer gespecificeerd, toont dan ook de wijzigingen in de werkboom die nog niet zijn geënsceneerd (d.w.z., zoals de uitvoer van Git Diff).
Antwoord 18
In de loop van de tijd hebben we misschien een echt lange lijst met takken.
Hoewel sommige van de andere oplossingen geweldig zijn, is hier wat ik doe (vereenvoudigd van het antwoord van Jacob):
git branch | grep \*
Nu,
git status
Works, maar alleen als er lokale wijzigingen zijn
Antwoord 19
git status
geeft ook de filiaalnaam samen met wijzigingen.
b.g
>git status
On branch master // <-- branch name here
.....
Antwoord 20
Ik raad aan om een van deze twee opdrachten te gebruiken.
git branch | grep -e "^*" | cut -d' ' -f 2
of
git status | sed -n 1p | cut -d' ' -f 3
of (meer uitgebreid)
git status -uno -bs| cut -d'#' -f 3 | cut -d . -f 1| sed -e 's/^[ \t]//1'| sed -n 1p
Antwoord 21
Zorg ervoor dat de versiebehoefingen zijn ingeschakeld (weergave – & gt;
Labels). U kunt vervolgens de filiaalnaam naast de projectnaam zien.
http://netbeans.org/bugzilla/show_bug.cgi?id=213582
Antwoord 22
Hoe zit het?
{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
Antwoord 23
Ik heb een eenvoudig script genaamd git-cbr
(Huidige tak ) die de huidige filiaalnaam afdrukken.
#!/bin/bash
git branch | grep -e "^*"
Ik heb dit script in een aangepaste map geplaatst (~/.bin
). De map bevindt zich in $PATH
.
Dus als ik me nu in een git repo bevindt, typ ik gewoon git cbr
om de huidige branchnaam af te drukken.
$ git cbr
* master
Dit werkt omdat het git
commando zijn eerste argument neemt en een script probeert uit te voeren met de naam git-arg1
. Bijvoorbeeld, git branch
probeert een script uit te voeren met de naam git-branch
, enz.
Antwoord 24
Het volgende shell-commando vertelt je de branch waarin je je momenteel bevindt.
git branch | grep ^\*
Als je niet elke keer dat lange commando wilt typen als je de branch wilt weten en je Bash gebruikt, geef het commando dan een korte alias, bijvoorbeeld alias cb
, zoals zo.
alias cb='git branch | grep ^\*'
Als je in branch master bent en je prompt is $
, dan krijg je * master
als volgt.
$ cb
* master
Antwoord 25
Je kunt je bash-uitvoer permanent instellen om je git-branch-naam weer te geven. Het is erg handig als je met verschillende branches werkt, het is niet nodig om de hele tijd $ git status
te typen.
Github repo git-aware-prompt
.
Open je terminal (ctrl-alt-t) en voer de commando’s in
mkdir ~/.bash
cd ~/.bash
git clone git://github.com/jimeh/git-aware-prompt.git
Bewerk je .bashrc met de opdracht sudo nano ~/.bashrc
(voor Ubuntu) en voeg het volgende toe bovenaan:
export GITAWAREPROMPT=~/.bash/git-aware-prompt
source "${GITAWAREPROMPT}/main.sh"
Plak dan de code
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\]\$ "
aan het einde van hetzelfde bestand waarin u eerder de installatiecode hebt geplakt. Dit geeft je de gekleurde uitvoer:
Antwoord 26
Retourneert de naam van de filiaal of SHA1 wanneer op de losse kop:
git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD
Dit is een korte versie van het antwoord van @dmaestro12 en zonder tagondersteuning.
Antwoord 27
Als je echt wilt dat de laatste branch/tag ook wordt uitgecheckt in de vrijstaande HEAD-status.
git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev
Bijwerken
Dit is fijner als je awk hebt en er niet bang voor bent.
git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
Antwoord 28
Ik weet dat dit laat is, maar op een linux/mac kun je vanaf de terminal het volgende gebruiken.
git status | sed -n 1p
Uitleg:
git-status -> krijgt de status van de werkende boom
sed -n 1p -> haalt de eerste regel uit de statustekst
De reactie op het bovenstaande commando ziet er als volgt uit:
"On branch your_branch_name"
Antwoord 29
Voeg het toe aan PS1
met Mac :
PS1='\W@\u >`[ -d .git ] && git branch | grep ^*|cut -d" " -f2`> $ '
Voordat u het bovenstaande commando uitvoert:
Na het uitvoeren van dat commando:
Maak je geen zorgen, als het geen GIT-repository is, zal het geen fout weergeven vanwege [-d .git]
die controleert of de map .git
bestaat of niet.
Antwoord 30
als je in Jenkins draait, kun je de variabele GIT_BRANCH gebruiken zoals hier wordt weergegeven:
https://wiki.jenkins-ci.org/display/JENKINS/Git+ Plug-in
De git-plug-in stelt verschillende omgevingsvariabelen in die je in je scripts kunt gebruiken:
GIT_COMMIT – SHA van de huidige
GIT_BRANCH – Naam van de tak die momenteel wordt gebruikt, b.v. “master” of “origin/foo”
GIT_PREVIOUS_COMMIT – SHA van de vorige gebouwde commit van dezelfde branch (de huidige SHA op de eerste ingebouwde branch)
GIT_URL – Externe URL van opslagplaats
GIT_URL_N – Repository externe URL’s wanneer er meer dan 1 remotes zijn, b.v. GIT_URL_1, GIT_URL_2
GIT_AUTHOR_EMAIL – E-mail van de verantwoordelijke/auteur
GIT_COMMITTER_EMAIL – E-mail van de verantwoordelijke/auteur