Tampilkan hanya cabang saat ini di Git

356

Saya mencoba mencari perintah khusus Git untuk ini, tetapi saya tidak dapat menemukannya. Adakah yang lebih pendek atau lebih cepat dari yang berikut?

git branch | awk '/\*/ { print $2; }'
Saunders Ollie
sumber
1
Saya pikir ini adalah cara
tercepat
2
kemungkinan duplikat dari Cara mendapatkan nama cabang saat ini di Git?
Chandrayya GK
@ ChandrayyaGK: Tidak, karena pertanyaan lain adalah melakukannya dari dalam IDE Anda. (Banyak jawaban untuk penggunaan baris perintah, jadi patut dicoba, tetapi itu bukan duplikat yang tepat, dan jawaban itu mungkin harus dimigrasikan di sini, jika ada yang menambah nilai signifikan pada apa yang sudah ada di sini.)
tripleee
3
@ Torek - inilah tugas sederhana lain yang dipersulit oleh Git.
jww
Jawaban teratas untuk tautan @ChandrayyaGK yang diposting jauh lebih lambat dari ini!
Colm Bhandal

Jawaban:

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

Ini harus bekerja dengan Git 1.6.3 atau lebih baru.

pangeran
sumber
Juga tidak bekerja untuk saya, dengan git-1.6.2.5. git rev-parse --abbrev-ref HEAD => --abbrev-ref 311172491a9a667f9321bdf1c4fe5e22cc6e2c08 (yaitu rev-parse tidak menerima --abbrev-ref (tidak ada dalam halaman manual))
JasonWoof
1
JasonWoof, bekerja untuk saya di 1.6.4.2, perlu changelog untuk melihat kapan tepatnya melakukannya terjadi ;-)
Michael Krelin - hacker
7
Sejauh yang saya tahu dari log Git, fitur ini digabung pada 2009-04-20 dan dirilis dengan versi 1.6.3.
earl
1
Saya juga sangat ingin memahami hal itu. Bagaimana cara kerjanya? Juga, sepertinya --abbrev-ref tidak mengembalikan apa pun untuk argumen lain. Itu tidak mungkin hanya memiliki KEPALA sebagai argumen.
Setafire
6
Perhatikan bahwa jika Anda berada dalam referensi simbolis terpisah (mungkin berarti bahwa Anda berada di cabang, tetapi memeriksa komit sebelumnya), perintah ini hanya akan kembali HEAD, tidak diharapkanmaster
unifreak
129

Di Git 1.8.1 Anda dapat menggunakan perintah git symbolic-ref dengan opsi "--short":

$ git symbolic-ref HEAD
refs/heads/develop
$ git symbolic-ref --short HEAD
develop
dieresys
sumber
Terima kasih. Alias ​​dibuat.
Michael Burr
7
Lebih baik daripada jawaban yang diterima IMO, karena itu bekerja pada repo tanpa komitmen
Jerome Dalbert
2
Mendapatkan kesalahan fatal: ref HEAD is not a symbolic refsaat menjalankan ini sebagai bagian dari build
TravisCI
tampaknya tidak berfungsi di GIT 1.9.1 `` `git versi 1.9.1 fatal: ref HEAD bukan ref simbolis` ``
Richard
Bekerja untuk saya: git versi 2.16.2.windows.1
Tagc
59

Dengan Git 2.22 (Q2 2019), Anda akan memiliki pendekatan yang lebih sederhana: git branch --show-current .

Lihat komit 0ecb1fc (25 Okt 2018) oleh Daniels Umanovskis ( umanovskis) .
(Digabung oleh Junio ​​C Hamano - gitster- dalam komit 3710f60 , 07 Mar 2019)

branch: memperkenalkan --show-currentopsi tampilan

Saat dipanggil dengan --show-current, git branchakan mencetak nama cabang saat ini dan mengakhiri.
Hanya nama sebenarnya yang akan dicetak, tanpa refs/heads.
Dalam keadaan HEAD terlepas, tidak ada output.

Ditujukan baik untuk scripting dan penggunaan interaktif / informatif.
Tidak seperti itu git branch --list, tidak diperlukan pemfilteran untuk mendapatkan nama cabang saja.

VONC
sumber
15
Akhirnya, apa yang tampaknya sudah ada sejak awal, telah ditambahkan!
dtasev
27

Anda mungkin tertarik dengan output dari

git symbolic-ref HEAD

Secara khusus, tergantung pada kebutuhan dan tata letak yang mungkin ingin Anda lakukan

basename $(git symbolic-ref HEAD)

atau

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

dan sekali lagi ada .git/HEADfile yang mungkin juga menarik bagi Anda.

Michael Krelin - hacker
sumber
2
Anda dapat mempersingkat git rev-parse --symbolic-full-namemenjadi git symbolic-ref.
earl
1
Anda tidak perlu menggunakan basenameatau cut; gunakan BR=${BR#refs/heads/}(di mana BR adalah nama variabel tempat Anda menyimpan output git symbolic-ref HEAD).
Jakub Narębski
Jakub, tentu saja tidak, asalkan Anda memiliki output dalam variabel.
Michael Krelin - hacker
5
dapat melakukannya git symbolic-ref --short HEADjuga
Fahad Siddiqui
2
Ini akan rusak jika Anda memiliki garis miring pada nama cabang Anda ("task / foo", "fitur / bar"). Sekelompok buildscripts saya mulai gagal ketika rekan-rekan memutuskan bahwa tebasan itu keren ...
vacri
13

Dari apa yang bisa saya katakan, tidak ada cara untuk menunjukkan secara asli hanya cabang saat ini di Git, jadi saya telah menggunakan:

git branch | grep '*'
ada di sana
sumber
3
Sementara itu berfungsi dengan GNU coreutils, grep '*'secara nominal merupakan kesalahan sintaksis. Anda mungkin ingin git branch | sed -n 's/^\* //p'tetap. Atau sebenarnya, apa yang diposting OP di tempat pertama, yang jumlahnya sama.
tripleee
@ tripleee dapatkah Anda memberi tahu saya tentang mengapa grep '*'secara nominal kesalahan sintaksis?
JK ABC
1
@JKABC: apa yang dimaksud @tripleee adalah '*'ekspresi reguler dan karenanya tidak valid. Anda mungkin ingin menggunakan '[*]'(yaitu, karakter *alih-alih operator "nol atau lebih banyak kali").
johndodo
2
@johndodo terima kasih atas klarifikasi, masuk akal bagi saya sekarang. Saya biasanya melakukannya dengangrep '\*'
JK ABC
2
hanya dapat memotong nama cabang dengangit branch | grep "*" | cut -d' ' -f2
Fahad Siddiqui
7

Saya kira ini harus cepat dan dapat digunakan dengan API Python:

git branch --contains HEAD
* master
urvish
sumber
4
Ini tidak menampilkan cabang saat ini. Ini menghasilkan daftar cabang yang menunjuk ke titik HEAD komit ke. Dan ya, itu bisa tumpang tindih, tetapi ini bisa menyebabkan kesalahpahaman. Buat cabang baru dari tempat Anda berada dan coba lagi jalur Anda: dua cabang. Pertanyaan meminta " hanya cabang saat ini ".
RomainValeri
4

saya menggunakan

/etc/bash_completion.d/git

Itu datang dengan Git dan memberikan prompt dengan nama cabang dan penyelesaian argumen.

iny
sumber
Bagaimana bisikan ini diaktifkan?
Alex
Di ubuntu, $ source /etc//bash_completion.d/git-prompt File dapat diberi nama berbeda pada sistem yang berbeda. (Catatan: sourcekata kunci sama dengan .(dot) di bash.)
michael
1

Ini tidak lebih pendek, tetapi juga berhubungan dengan cabang terpisah:

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

Untuk kelengkapan, echo $(__git_ps1)setidaknya di Linux, harus memberi Anda nama cabang saat ini yang dikelilingi oleh tanda kurung.

Ini mungkin berguna adalah beberapa skenario karena ini bukan perintah Git (sementara tergantung pada Git), terutama untuk mengatur Bash command prompt Anda untuk menampilkan cabang saat ini .

Sebagai contoh:

/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>
tymtam
sumber
item tersebut adalah alias dan harus ada untuk skrip shell interaktif. mungkin tidak ada untuk skrip apa pun.
Alexander Stohr
0

Seseorang mungkin menganggap ini ( ) bermanfaat. Cabang saat ini ditunjukkan dengan tanda *.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
Kaliyug Antagonist
sumber