Git'teki yalnızca geçerli dalı göster


357

Bunun için özel bir Git komutu aramaya çalıştım, ama bir tane bulamadım. Aşağıdakilerden daha kısa veya daha hızlı bir şey var mı?

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

1
ben bu akım dalı almak için hızlısı mümkün bir yol olduğunu düşünüyorum
Eimantas


@ChandrayyaGK: Hayır, çünkü diğer soru bunu IDE'nizden yapmakla ilgili. (Cevapların çoğu komut satırı kullanımı içindir, bu yüzden bir göz atmaya değer, ancak uygun bir kopya değil ve zaten burada olanlara önemli bir değer katan herhangi bir yanıt varsa, bu cevaplar belki de buraya taşınmalıdır.)
üçlü

3
@Torek - Git tarafından zorlaştırılan bir başka basit görev.
jww

@ChandrayyaGK tarafından gönderilen bağlantıya verilen en iyi yanıt bundan çok daha yavaştır!
Colm Bhandal

Yanıtlar:


661
$ git rev-parse --abbrev-ref HEAD
master

Bu Git 1.6.3 veya daha yeni bir sürümle çalışmalıdır.


Git-1.6.2.5 ile benim için de çalışmıyor. git rev-parse --abbrev-ref HEAD => --abbrev-ref 311172491a9a667f9321bdf1c4fe5e22cc6e2c08 (yani rev-parse --abbrev-ref'yi kabul etmiyor (man sayfasında da yok))
JasonWoof

1
JasonWoof, 1.6.4.2 benim için çalışıyor, tam olarak ne zaman olduğunu görmek için changelog gerekir ;-)
Michael Krelin - hacker

7
Git günlüklerinden anlayabildiğim kadarıyla, bu özellik 2009-04-20'de birleştirildi ve 1.6.3 sürümü ile piyasaya sürüldü.
earl

1
Bunu da gerçekten anlamak istiyorum. Bu gerçekten nasıl çalışıyor? Ayrıca, --abbrev-ref başka bir argüman için hiçbir şey döndürmüyor gibi görünüyor. Muhtemelen HEAD tartışması olamaz.
Setafire

6
Ayrılmış bir sembolik referansta bulunuyorsanız (bir dalda olduğunuzu, ancak önceki taahhüdünüzü kontrol ettiğiniz anlamına gelebilir), bu komutun yalnızca HEADbeklenmeyeceğini döndüreceğini unutmayınmaster
Unifreak

129

Git 1.8.1'de git symbolic-ref komutunu "--short" seçeneğiyle kullanabilirsiniz:

$ git symbolic-ref HEAD
refs/heads/develop
$ git symbolic-ref --short HEAD
develop

Teşekkürler. Takma ad oluşturuldu.
Michael Burr

7
Kabul edilen cevap IMO'dan daha iyi, çünkü taahhüt olmadan depolar üzerinde çalışıyor
Jerome Dalbert

2
fatal: ref HEAD is not a symbolic refBunu bir TravisCI yapısının parçası olarak çalıştırırken hata alıyorum
kmanzana

GIT 1.9.1'de çalışmıyor gibi görünüyordu `` git sürüm 1.9.1 ölümcül: ref HEAD sembolik bir ref değil ``
Richard

Benim için çalışıyor: git version 2.16.2.windows.1
Tagc

59

Git 2.22 (Q2 2019) ile, daha basit bir yaklaşım olacaktır: git branch --show-current.

Bakınız Daniels Umanovskis ( ) tarafından taahhüt edilen 0ecb1fc (25 Eki 2018 ) . (Göre Birleştirilmiş - Junio Cı Hamano - içinde 3710f60 tamamlama 2019 07 Mar)umanovskis
gitster

branch: --show-currentgörüntüleme seçeneğini tanıt

İle çağrıldığında --show-current, git branchgeçerli şube adını yazdırmak ve sonlandırır.
Sadece gerçek isim yazdırılır, olmadan refs/heads.
Ayrılmış HEAD durumunda hiçbir şey çıkmaz.

Hem kodlama hem de etkileşimli / bilgilendirici kullanım için tasarlanmıştır.
Bunun aksine git branch --list, sadece şube adını almak için filtreleme gerekmez.


15
Sonunda, en başından beri orada olması gerektiği gibi görünüyor, eklendi!
dtasev

27

Çıktıları ilginizi çekebilir

git symbolic-ref HEAD

Özellikle ihtiyaçlarınıza ve düzeninize bağlı olarak yapmak isteyebilirsiniz

basename $(git symbolic-ref HEAD)

veya

git symbolic-ref HEAD | cut -d/ -f3-

ve sonra yine .git/HEADilginizi çekebilecek dosya var.


2
Sen kısaltabilir git rev-parse --symbolic-full-nameiçin git symbolic-ref.
kont

1
Kullanılacak gerekmez basenameya cut; kullanın BR=${BR#refs/heads/}(burada BR, çıktısını kaydettiğiniz değişkenin adıdır git symbolic-ref HEAD).
Jakub Narębski

Jakub, elbette, değişken olarak çıktıya sahip olmanız şartıyla, hayır.
Michael Krelin - hacker

5
yapabileceği git symbolic-ref --short HEADde
Fahad Siddiqui

2
Şube adlarınızda eğik çizgiler varsa ("görev / foo", "özellik / çubuk") bu durum bozulur. Meslektaşlarım eğik çizgiler serin olduğuna karar verdiğinde bir sürü buildscripts başarısız oldu ...
Vacri

13

Söyleyebileceğim kadarıyla, sadece Git'teki geçerli dalı göstermenin bir yolu yok, bu yüzden kullanıyorum:

git branch | grep '*'

3
Bu GNU coreutils ile çalışırken grep '*', nominal olarak bir sözdizimi hatasıdır. Muhtemelen git branch | sed -n 's/^\* //p'zaten istiyorsun . Ya da aslında OP'nin ilk etapta yayınladığı şey, aynı şeydir.
üçlü

@tripleee grep '*', nominal olarak neden bir sözdizimi hatası olduğu konusunda beni aydınlatabilir misiniz ?
JK ABC

1
@JKABC: @tripleee'nin anlamı, '*'normal bir ifade olması ve geçersiz olmasıdır. Muhtemelen kullanmak istiyorsunuz '[*]'(yani *"sıfır veya daha fazla kez" operatörü yerine karakter ).
johndodo

2
@ johndodo açıklama için teşekkür ederim, şimdi bana mantıklı geliyor. Genellikle bunu yaparımgrep '\*'
JK ABC

2
sadece şube adını kesebilirgit branch | grep "*" | cut -d' ' -f2
Fahad Siddiqui

7

Bu hızlı olmalı ve bir Python API ile kullanılabilir sanırım:

git branch --contains HEAD
* master

4
Bu geçerli dalın çıktısını almaz. Taahhüt HEAD'inin işaret ettiği dalların listesini çıkarır. Ve evet, üst üste gelebilir, ancak bu yanlış anlamalara yol açabilir. Bulunduğunuz yerden yeni bir şube oluşturun ve hattınızı tekrar deneyin: iki şube. Soru " sadece şu anki şube " diye soruyor .
RomainValeri

4

kullanıyorum

/etc/bash_completion.d/git

Git ile birlikte geldi ve şube adı ve argüman tamamlama istemi sağlar.


Bu komut istemi nasıl etkinleştirilebilir?
Alex

Ubuntu'da, $ source /etc//bash_completion.d/git-prompt Dosya farklı sistemlerde farklı adlandırılabilir. (Not: sourceanahtar kelime .bash'daki (nokta) ile aynıdır .)
michael

1

Bu daha kısa değildir, ancak müstakil dallarla da ilgilenir:

git branch | awk -v FS=' ' '/\*/{print $NF}' | sed 's|[()]||g'

1

Tamlık için, echo $(__git_ps1)en azından Linux'ta, parantezle çevrili mevcut dalın adını vermelisiniz.

Bu, Git komutuna bağlı olmadığından (Git'e bağlıyken), özellikle Bash komut isteminizi geçerli dalı görüntüleyecek şekilde ayarlamak için bazı senaryolarda yararlı olabilir .

Örneğin:

/mnt/c/git/ConsoleApp1 (test-branch)> echo $(__git_ps1)
(test-branch)
/mnt/c/git/ConsoleApp1 (test-branch)> git checkout master
Switched to branch 'master'
/mnt/c/git/ConsoleApp1 (master)> echo $(__git_ps1)
(master)
/mnt/c/git/ConsoleApp1 (master)> cd ..
/mnt/c/git> echo $(__git_ps1)

/mnt/c/git>

öğe bir takma addır ve etkileşimli kabuk komut dosyaları için mevcut olmalıdır. muhtemelen herhangi bir komut dosyası için mevcut değildir.
Alexander Stohr

0

Birisi bunu ( ) faydalı bulabilir . Geçerli dal * işareti ile gösterilir.git show-branch --current

host-78-65-229-191:idp-mobileid user-1$ git show-branch --current
! [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
 * [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
--
+  [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
+  [CICD-1283-pipeline-in-shared-libraries^] feat(CICD-1283): Used the renamed AWS pipeline.
+  [CICD-1283-pipeline-in-shared-libraries~2] feat(CICD-1283): Point to feature branches of shared libraries.
-- [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.