Soru Güncel şube adı Git'te nasıl edinilir?


Bir Subversion geçmişindenim ve bir şubem olduğunda, "Bu çalışma dosyaları bu şubeye işaret ediyor" ile çalıştığımı biliyordum.

Ama Git'le birlikte, master veya başka bir şubeye bağlı olsun, NetBeans veya Notepad ++ içindeki bir dosyayı düzenlerken emin değilim.

İle sorun yok git bash, bana ne yaptığımı söyler.


1718
2018-06-05 20:13


Menşei


IDE'nizin dosyayı görüntülemesine izin verin .git/HEAD, muhtemelen bir ana dizinde - Tino
stackoverflow.com/questions/1417957/... $ git rev ayrıştırması --abbrev-ref HEAD - fantastory
olası kopyası Zaman aşımına uğramış Git dalı programlı olarak nasıl belirlenir - tripleee
Görünüm ile -> NetBeans'da etkinleştirilmiş Etiketleme Etiketlerini göster, sonra yapmanız gereken tek şey, mevcut dalı görmek için farenizi Proje (veya Dosya veya Sık Kullanılanlar) klasörünün üzerine getirmektir. - idclaar
Olası kopya Git'te sadece mevcut şubeyi göster - techraf


Cevaplar:


git branch

Repo'nuzun tüm yerel şubelerini göstermelisiniz. Yıldızlı şube mevcut şubenizdir.


1298
2018-06-05 20:17



Eclipse'de çalışmaya istekli iseniz, "eGit" adlı bir program vardır. Aksi halde, bilmiyorum .. seçtiğiniz programla uyumlu olan herhangi bir eklentinin yaratıcısına razı olursunuz (eğer varsa). - roberttdev
git branch | grep \* sadece mevcut şubeye dönmek (ama yine de önünde bir yıldız) - fboes
git branch | grep \* | cut -d ' ' -f2 yıldızdan sonra uzaya bölmek, sadece ismi geri vermek. Yorumlara göre @fboes - jgraup
git branch | grep \* | cut -d ' ' -f2- - @ jgraup'un yorumuna küçük bir değişiklik öneririm (değiştir -f2 ile -f2-) 1. boşluktan sonra her şeyi almak, çünkü * (HEAD detached at ff3de3c) alırsın (HEAD bir tek - boobiq
BTW: git rev-parse --abbrev-ref HEAD (aşağıda belirtildiği gibi) daha fazla ado olmadan çalışır ve mevcut şube adını sed veya grep - fboes


git rev-parse --abbrev-ref HEAD --

Bu mevcut şube gösterecektir.

Referans:


3643
2017-08-27 12:33



@ChrisNelson, çünkü tüm şubelerin uzun bir listesi yerine sadece mevcut şubeyi görüntüler. - avakar
İyi bir, ne yazık ki, 'bağımsız' KAFA 'durumunda iseniz (sadece' HEAD 'çıktılar, tamamen işe yaramazsa) işe yaramaz. - Carlos Campderrós
Eğer bir 'müstakil HEAD' durumundaysanız git internals tarafından sanırım, o ait olduğu şube hiçbir izleme, çünkü git branch gösterileri * (no branch), aynı zamanda işe yaramaz ... - Carlos Campderrós
"git symbolic-ref --short HEAD" da aynı amaç için çalışıyor - dusktreader
git rev-parse --abbrev-ref HEAD 2>/dev/null  / Dev / null bölümü, henüz HEAD değerine sahip olmayan yeni bir depo oluşturduysanız, bir hatayı görmenizi engeller. - Paradiesstaub


Sende git symbolic-ref HEAD tam refspec'i görüntüler.

Git v1.8 ve sonraki sürümlerinde yalnızca şube adını göstermek için (bunu belirtmek için Greg'e göre):

$ git symbolic-ref --short HEAD

Git v1.7 + da şunları yapabilirsiniz:

$ git rev-parse --abbrev-ref HEAD

Bir dalda iseniz her ikisi de aynı şube adını vermelidir. Eğer müstakil bir baş üzerindeyseniz cevaplar farklıdır.

Not:

Önceki bir müşteride, bu işe yarar:

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

- Darien 26. Mar 2014


399
2017-08-08 15:55



Diğer tüm cevaplarda olduğu gibi, bu bir 'müstakil HEAD' durumunda olduğunuzda işe yaramıyor. - Carlos Campderrós
@ CarlosCampderrós: ​​Eğer müstakil HEAD durumundaysanız, mevcut bir dal diye bir şey yoktur. Sonuçta, bulunduğunuz taahhüt, bir ya da daha fazla şube ile sıfırdan ulaşılabilir. - Flimm
HEAD olmadığında boş git depolarında sorun yaratır - Arne
Git sürümü 2.4.4 ile git rev-parse --abbrev-ref HEAD gösterileri HEAD müstakil kafanda olduğunda. - peterhil
En iyi cevap hala git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"  gibi bir dizi gösterecektir HEAD detached at a63917f ne zaman ayrık bir halde, ne de hiçbir şey ya da HEAD gösteren diğer cevapların aksine. Bu önemli. - Alkaline


Kendi referansım için (ancak diğerlerine faydalı olabilir), bu iş parçasında bahsedilen çoğu (temel komut satırı) tekniklerin bir özetini yaptım, her biri birkaç kullanım örneğine uygulandı: HEAD (işaret ediyor):

  • yerel şube
  • yerel şube ile senkronize olarak uzaktan izleme dalı (master / master ile aynı taahhütte)
  • uzaktan izleme dalı, yerel bir şube ile senkronize değil (kökeni / özellik-foo)
  • etiket (v1.2.3)
  • genel müstakil kafa (yukarıdakilerin hiçbiri)

Sonuçlar:

  • git branch | sed -n '/\* /s///p'
    • yerel şube: master
    • uzaktan izleme dalı (senkronize): (detached from origin/master)
    • uzaktan izleme dalı (senkronize değil): (detached from origin/feature-foo)
    • etiket: (detached from v1.2.3)
    • genel müstakil kafa: (detached from 285f294)
  • git status | head -1
    • yerel şube: # On branch master
    • uzaktan izleme dalı (senkronize): # HEAD detached at origin/master
    • uzaktan izleme dalı (senkronize değil): # HEAD detached at origin/feature-foo
    • etiket: # HEAD detached at v1.2.3
    • genel müstakil kafa: # HEAD detached at 285f294
  • git describe --all
    • yerel şube: heads/master
    • uzaktan izleme dalı (senkronize): heads/master (Not: değil  remotes/origin/master)
    • uzaktan izleme dalı (senkronize değil): remotes/origin/feature-foo
    • etiket: v1.2.3
    • genel müstakil kafa: v1.0.6-5-g2393761
  • cat .git/HEAD:
    • yerel şube: ref: refs/heads/master
    • tüm diğer kullanım durumları: ilgili taahhüdün SHA'sı
  • git rev-parse --abbrev-ref HEAD
    • yerel şube: master
    • diğer tüm kullanım örnekleri: HEAD
  • git symbolic-ref --short HEAD
    • yerel şube: master
    • diğer tüm kullanım örnekleri: fatal: ref HEAD is not a symbolic ref

(FYI bu, git sürüm 1.8.3.1 ile yapıldı)


168
2017-10-25 08:53



Özetle, hiçbiri elimden geleni yapmıyor gibi görünüyor. - bukzor
Bu benim için oldukça yardımcı oldu: git describe --all --exact-match 2>/dev/null | sed 's=.*/==' benim için en iyi çözümdü (etiketler ve dal başları için iyi isimler, rastgele ayrılmış başlıklar için çıktı yok). - Alex Dupuy
Ancak, bunu kullanarak keşfettim git describe Aynı taahhüde atıfta bulunan birden fazla dal olduğunda, ciddi bir başarısızlığa sahiptir, örn. hemen sonra git checkout -b foo - Bunlardan birini keyfi olarak kullanır (belki de en son yaratılmış olana benziyor). Filtrelenmiş çıktı kullanmak için stratejimi değiştireceğim git branchve sadece kullan git describe sonuç, müstakil bir kafa hakkında bir şeyse. - Alex Dupuy
Aslında kullanmam gerek git branch --no-color Dosya adının rahatsız edici terminal çıkış kodlarından arınmış olduğundan emin olmak için. - Alex Dupuy
Bu bana bir kereden fazla yardımcı oldu, çok titiz olduğun için teşekkürler! - Alice Purcell


Bir alternatif daha:

git name-rev --name-only HEAD

118
2017-11-02 19:17



ayrıca ile alınabilir echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/} - Antoine
HEAD, ana ve özellik dalı (örn., Birleştirme sırasında) için aynıysa işe yaramaz. Özellik dalında çalıştırılsa bile 'master'ı döndürür. - Orest Hera
git checkout master && git name-rev --name-only HEAD # ac-187 Beklendiği gibi çalışmıyor - Alexander Abashkin
Bunu birleştirmeden hemen önce bir değişkene ve aynı zamanda belirli bir işlemi kontrol edersem HEAD'ımın bağlantısının kesilmesine neden olabilir. Bu durumda, bu iyi çalışır. - Ishaan Sejwal
Bunu bir Jenkins boru hattından yapıyorum. Yani bu, şimdilik benim için en iyi cevap olarak görünüyor. iş git branch --list sadece diyor * (HEAD detached at 7127db5). iş git rev-parse --abbrev-ref HEAD sadece diyor HEAD ve bunun gibi. - Mig82


Yeterince basit, tek bir astarla aldım (bash)

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

(kredi: Sınırlı Kefaret)

Ve ben oradayken, uzaktan izleme dalını almak için bir tane var (eğer varsa)

git rev-parse --symbolic-full-name --abbrev-ref @{u}

87
2018-04-04 15:20



Çok fazla eğik çizgi var! :) sed -n 's/\* //p' hile yapar. Her ne kadar paranoya yöneliyor olsam da, sed -n 's/^\* //p'. - Mark Reed


Linux'ta, depo dizininde komut satırını (konsol) yazabilirsiniz:

$ git status

ve aralarında benzer bir şeye benzeyen bazı metinler göreceksiniz:

...
On branch master
...

şu an şu an master dalı. Herhangi bir dosyayı o anda düzenliyorsanız ve aynı yerel depoda bulunuyorsa (Git sürümü kontrol yönetimi altındaki dosyaları içeren yerel dizin), bu dalda dosya düzenliyorsunuz demektir.


49
2018-06-05 20:31



Ne yapmak istediğinize dayanarak kullanabilirsiniz git status ve yalnızca ilk çıktı satırı olsun git status | head -1 hangi gibi bir şey verir # On branch master. Eminim sürüm farklılıklarının da hesaba katılması gerekiyor. - Joshua Pinter
@JoshPinter: Ayrıca kullanabilirsiniz git status | grep 'On branch', aynı etkiye sahip olması gerekir (Git, sürümünüzün farklı bir şekilde göstermesi durumunda, anlamına gelmez). Veya git branch | grep '*'Bu, başlangıcında bir yıldız ile dalın adını gösterecektir. - Tadeck
Evet, bu da işe yarıyor ve daha esnek olabilir. Bir dev Rails uygulamasında sadece şube adını gösteren son sonucum: <tick>git status | head -1<tick>.gsub('# On branch ', '') - Joshua Pinter
git status Çok sayıda dosya yönetiliyorsa, bir değer döndürmek için uzun sürebilir. - the Tin Man


git symbolic-ref -q --short HEAD

Bunu mevcut şube adına ihtiyaç duyan komut dosyalarında kullanıyorum. Mevcut branş isminiz olacak olan HEAD’a mevcut kısa sembolik referansı gösterecektir.


26
2017-10-02 22:09



Teşekkürler, harika çalışıyor! - Ben de betiğimde "-C path_to_folder" i ekliyorum. - Tony


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

sadece şube adını gösterecek


24
2018-06-14 13:08



Şubeniz bu gibi bir şey gösteriyorsa * * (HEAD SUM_BRANCH_01'de ayrıldı) ", bu" git branch | grep -e "^ *" | cut -d '' -f 5 | cut -d ')' -f 'yi deneyin. " - Dylan Kapp
Mevcut şube adını almak için bu aynı senaryoyu yeni oluşturdum. Farklar konusunda yardımcı olabileceğini düşündüm. - tggagne


İle aynı uzunlukta bir komut satırı çözümü bulundu Oliver Refalo'siyi ol 'awk kullanarak:

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

awk "içinde şeyler yapmak" olarak okur {} regex ile eşleşen satırlarda ". Varsayılan olarak, boşluklarla ayrılmış alanları varsayar, bu nedenle ikinci baskıyı yaparsınız. Şube ile yalnızca satırın * olduğunu varsayabilirseniz, ^ .a, bash golfünü bırakabilirsiniz!


21
2018-02-19 22:50