Bagaimana cara mendapatkan nama cabang saat ini di Git?

Saya berasal dari latar belakang Subversion dan ketika saya memiliki cabang, saya tahu apa yang saya kerjakan dengan "File-file kerja ini menunjuk ke utas ini."

Tetapi dengan Git, saya tidak yakin kapan saya mengedit file di NetBeans atau Notepad ++, terlepas dari apakah itu dilampirkan ke master atau cabang lain.

Tidak masalah dengan git di bash, ini memberitahu saya apa yang saya lakukan.

1912
05 июня '11 в 23:13 2011-06-05 23:13 ditetapkan oleh mike628 pada 05 Juni '11 pada 23:13 2011-06-05 23:13
@ 36 jawaban
  • 1
  • 2
 git branch 

harus menunjukkan semua cabang lokal dari repo Anda. Cabang yang ditandai adalah cabang Anda saat ini.

Jika Anda hanya ingin nama cabang tempat Anda berada, Anda dapat melakukannya:

 git branch | grep \* | cut -d ' ' -f2 
1499
05 июня '11 в 23:17 2011-06-05 23:17 jawabannya diberikan roberttdev 05 Juni '11 pada 23:17 2011-06-05 23:17

Untuk menampilkan cabang saat ini di mana Anda berada, tanpa cabang lain yang terdaftar, Anda dapat melakukan hal berikut:

 git rev-parse --abbrev-ref HEAD 

Referensi:

3936
27 авг. jawabannya diberikan oleh Jistanidiot 27 Agustus. 2012-08-27 15:33 '12 pada 15:33 2012-08-27 15:33

Anda juga memiliki git symbolic-ref HEAD , yang menampilkan refspec lengkap.

Untuk hanya menampilkan nama cabang di Git v1.8 dan versi yang lebih baru (terima kasih kepada Greg karena menunjukkannya):

 $ git symbolic-ref --short HEAD 

Di Git v1.7 + Anda juga dapat:

 $ git rev-parse --abbrev-ref HEAD 

Keduanya harus menentukan nama cabang yang sama jika Anda berada di cabang. Jika Anda berada di kepala yang terpisah, jawabannya berbeda.

Catatan:

Pada klien sebelumnya, ini berfungsi:

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

- Darien 26. Maret 2014

440
08 авг. jawabannya diberikan Wernight 08 Agustus. 2012-08-08 18:55 '12 pada 18:55 2012-08-08 18:55

Untuk referensi saya sendiri (tetapi ini bisa bermanfaat bagi orang lain), saya melakukan tinjauan terhadap sebagian besar (baris perintah dasar) teknik yang disebutkan dalam utas ini, yang masing-masing berlaku untuk beberapa kasus penggunaan: HEAD is (mengindikasikan):

  • departemen lokal (master)
  • cabang pelacakan jarak jauh secara sinkron dengan cabang lokal (asal / master pada komit yang sama dengan master)
  • trek jarak jauh tidak disinkronkan dengan cabang lokal (asal / fitur-foo)
  • tag (v1.2.3)
  • submodule (jalankan di direktori submodule)
  • kepala terputus total (tidak ada yang di atas)

Hasil:

  • git branch | sed -n '/\*/s///p'
    • kantor lapangan: master
    • cabang pelacakan jarak jauh (sinkron): (detached from origin/master)
    • cabang pelacakan jarak jauh (tidak disinkronkan): (detached from origin/feature-foo)
    • tag: (detached from v1.2.3)
    • submodule: '(HEAD terputus di 285f294)
    • total head (detached from 285f294) : (detached from 285f294)
  • git status | head -1
    • Kantor lokal: # On branch master
    • cabang pelacakan jarak jauh (sinkron): # HEAD detached at origin/master
    • cabang pelacakan jarak jauh (tidak disinkronkan): # HEAD detached at origin/feature-foo
    • tag: # HEAD detached at v1.2.3
    • submodule: # HEAD detached at 285f294
    • total head detached: # HEAD detached at 285f294
  • git describe --all
    • Kantor lokal: heads/master
    • cabang pelacakan jarak jauh (sinkron): heads/master (catatan: bukan remotes/origin/master )
    • cabang pelacakan jarak jauh (tidak disinkronkan): remotes/origin/feature-foo
    • Tag: v1.2.3
    • submodule: remotes/origin/HEAD
    • kepala terputus umum: v1.0.6-5-g2393761
  • cat.git/HEAD :
    • Kantor lokal: ref: refs/heads/master
    • submodule: cat:.git/HEAD: Not a directory
    • semua kasus penggunaan lainnya: SHA matching commit
  • git rev-parse --abbrev-ref HEAD
    • kantor lapangan: master
    • semua kasus penggunaan lainnya: HEAD
  • git symbolic-ref --short HEAD
    • kantor lapangan: master
    • semua kasus penggunaan lainnya: fatal: ref HEAD is not a symbolic ref

(Untuk informasi Anda, ini dilakukan dengan menggunakan git versi 1.8.3.1)

190
25 окт. jawaban yang diberikan oleh Stefaan pada 25 Oktober. 2013-10-25 11:53 '13 pada 11:53 2013-10-25 11:53

Alternatif lain:

 git name-rev --name-only HEAD 
124
02 нояб. jawabannya diberikan oleh Filip Spiridonov 02 Nov. 2015-11-02 22:17 '15 jam 10:17 malam 2015-11-02 22:17

Cukup bagus, saya mendapatkannya dalam satu liner (bash)

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

(kredit: penebusan terbatas)

Dan sementara saya di sana, satu liner untuk pelacakan jarak jauh (jika ada)

 git rev-parse --symbolic-full-name --abbrev-ref @{u} 
89
04 апр. Jawabannya diberikan oleh Olivier Refalo 04 Apr. 2012-04-04 18:20 '12 pada pukul 6:20 sore 2012-04-04 18:20

Anda cukup memasukkan baris perintah (konsol) di Linux di direktori repositori:

 $ git status 

dan Anda akan melihat teks, di antaranya adalah sesuatu yang mirip dengan:

 ... On branch master ... 

yang berarti Anda berada di cabang master . Jika Anda mengedit file pada titik ini dan berada di repositori lokal yang sama (direktori lokal yang berisi file-file yang ada dalam kontrol versi Git), Anda mengedit file di utas ini.

57
05 июня '11 в 23:31 2011-06-05 23:31 jawabannya diberikan oleh Tadeck pada 05 Juni '11 pada 23:31 2011-06-05 23:31
 git symbolic-ref -q --short HEAD 

Saya menggunakannya dalam skrip yang membutuhkan nama cabang saat ini. Ini akan menunjukkan kepada Anda tautan simbolis pendek saat ini ke HEAD, yang akan menjadi nama cabang Anda saat ini.

26
03 окт. Balas Kousha 03 Oktober. 2013-10-03 01:09 '13 pada 1:09 2013-10-03 01:09
 git branch | grep -e "^*" | cut -d' ' -f 2 

hanya nama cabang yang akan ditampilkan

24
14 июня '16 в 16:08 2016-06-14 16:08 jawabannya diberikan ungalcrys 14 Juni '16 pukul 16:08 2016-06-14 16:08

Menemukan solusi baris perintah dengan panjang yang sama dengan Oliver Refalo menggunakan ol yang baik:

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

awk membaca bahwa "melakukan hal-hal di {} sesuai dengan persamaan reguler". Secara default, ia menerima bidang yang dibatasi oleh spasi, jadi Anda mengetikkan yang kedua. Jika Anda dapat berasumsi bahwa hanya baris dengan cabang Anda yang memiliki *, Anda dapat mengatur u>

21
20 февр. Balas Silas Barta 20 Feb. 2014-02-20 01:50 '14 pukul 1:50 2014-02-20 01:50

git branch hanya menampilkan nama cabang saat ini.

Meskipun cabang git akan menunjukkan kepada Anda semua cabang dan menyorot tanda bintang saat ini dengan tanda bintang, mungkin terlalu rumit ketika bekerja dengan sejumlah besar cabang.

Untuk hanya menampilkan cabang tempat Anda berada, gunakan:

 git rev-parse --abbrev-ref HEAD 
20
25 мая '18 в 8:33 2018-05-25 08:33 jawabannya diberikan oleh Lawrence Paje pada 25 Mei '18 pukul 8:33 pagi 2018-05-25 08:33
 #!/bin/bash function git.branch { br=`git branch | grep "*"` echo ${br/* /} } git.branch 
17
23 янв. Jawabannya diberikan Dziamid 23 Januari. 2012-01-23 20:11 '12 pada 20:11 2012-01-23 20:11

Mengapa tidak menggunakan prompt shell git -aware, yang akan memberi tahu Anda nama cabang saat ini? git status juga membantu.


Sebagai contrib/ git-prompt.sh (git versi 2.3.0), sebagaimana didefinisikan dalam fungsi bantu __git_ps1

  • Pertama, ada kasus khusus, jika rebasing terdeteksi. Git menggunakan cabang yang tidak disebutkan namanya (HEAD terpisah) selama proses pengalihan untuk menjadikannya atom, dan cabang asli disimpan di tempat lain.

  • Jika file .git/HEAD adalah tautan simbolik (kasus yang sangat jarang dari sejarah Git kuno), ia menggunakan git symbolic-ref HEAD 2>/dev/null

  • Kalau tidak, ia membaca file .git/HEAD . >

    • Jika file ini tidak ada, maka tidak ada cabang saat ini. Ini biasanya terjadi jika repositori kosong.

    • Jika diawali dengan awalan 'ref: ' , maka .git/HEAD adalah symref (tautan simbolik), dan kami berada di cabang normal. Hapus awalan ini untuk mendapatkan nama lengkap, dan bagi refs/heads/ menjadi nama pendek dari cabang saat ini:

       b="${head#ref: }" # ... b=${b##refs/heads/} 
    • Jika tidak dimulai dengan 'ref: ' , maka dinonaktifkan oleh HEAD (cabang anonim), menunjukkan secara >git describe ... untuk menulis komit saat ini dalam bentuk yang dapat dibaca.

Saya harap ini membantu.

15
06 июня '11 в 1:25 2011-06-06 01:25 jawabannya diberikan oleh Jakub Narębski pada 06 Juni '11 pada 1:25 2011-06-06 01:25

Anda dapat menggunakan git bash di direktori kerja. Perintahnya adalah sebagai berikut.

 git status -b 

dia akan memberi tahu Anda di cabang mana Anda berada, ada banyak perintah yang berguna, beberapa di antaranya

 -s 

- short Berikan output dalam format pendek.

-b --branch Menampilkan cabang dan melacak informasi bahkan dalam format pendek.

- porcelain [=] Berikan hasilnya dalam format skrip yang mudah diurai. Ini terlihat seperti output pendek, tetapi akan tetap stabil di versi git dan terlepas dari konfigurasi pengguna. Lihat di bawah untuk detailnya.

Parameter versi digunakan untuk menentukan versi format. Ini opsional dan format default adalah versi asli v1.

- long Berikan hasilnya dalam format panjang. Ini adalah nilai default.

-v - details Selain nama-nama file yang telah diubah, teks perubahan yang diatur untuk komit juga ditampilkan (mis. Bagaimana output git diff - cache). Jika -v ditentukan dua kali, maka perubahan dalam pohon kerja yang belum dikirim (yaitu, sebagai git diff output) juga ditampilkan.

14
08 дек. Jawabannya diberikan Prateek Gangwal 08 Des . 2016-12-08 15:19 '16 pada 15:19 2016-12-08 15:19

Saya sarankan menggunakan salah satu dari dua perintah ini.

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

Atau sama saja

git status | sed -n 1p | cut -d' ' -f 3

ATAU (lebih banyak bertele-tele)

git status -uno -bs| cut -d'#' -f 3 | cut -d. -f 1| sed -e 's/^[ \t]//1'| sed -n 1p

12
22 февр. jawaban yang diberikan oleh jackotonye pada 22 Februari. 2018-02-22 19:12 '18 pada 19:12 2018-02-22 19:12

Seiring waktu, kami dapat memiliki daftar cabang yang sangat panjang.

Sementara beberapa solusi lain sangat bagus, inilah yang saya lakukan (disederhanakan dengan jawaban Jacob):

 git branch | grep \* 

Sekarang

 git status 

berfungsi, tetapi hanya jika ada perubahan lokal

12
11 марта '14 в 23:41 2014-03-11 23:41 jawabannya diberikan oleh karthikr pada 11 Maret '14 pukul 23:41 2014-03-11 23:41

Maaf, ini adalah jawaban baris perintah yang lain, tetapi inilah yang saya cari ketika saya menemukan pertanyaan ini, dan banyak dari jawaban ini sangat membantu. Solusi saya adalah fungsi bash shell berikut:

 get_branch () { git rev-parse --abbrev-ref HEAD | grep -v HEAD || \ git describe --exact-match HEAD 2> /dev/null || \ git rev-parse HEAD } 

Ini harus selalu memberi saya sesuatu yang bisa dibaca dan >git checkout sebagai argumen.

  • di cabang lokal: feature/HS-0001
  • oleh tagged commit (terputus): v3.29.5
  • pada cabang jarak jauh (terputus, tidak ditandai): SHA1
  • untuk perbaikan terpisah lainnya: SHA1
12
08 апр. jawabannya diberikan dmaestro12 08 April. 2016-04-08 19:06 '16 pada 19:06 2016-04-08 19:06

Di Netbeans, pastikan anotasi versi diaktifkan (Lihat → Tampilkan Label Versi). Kemudian Anda bisa melihat nama cabang di sebelah nama proyek.

http://netbeans.org/bugzilla/show_bug.cgi?id=213582

11
09 авг. jawabannya diberikan Saroj 09 Agustus. 2012-08-09 19:10 '12 pada 19:10 2012-08-09 19:10

Versi yang kurang berisik untuk status git akan membantu

 git status -bsuno 

Mencetak

 ## branch-name 
11
22 марта '18 в 2:55 2018-03-22 02:55 jawabannya diberikan dgolovin 22 Maret 18 'di 2:55 2018-03-22 02:55

Saya memiliki skrip sederhana bernama git-cbr (cabang saat ini) yang mencetak nama cabang saat ini.

 #!/bin/bash git branch | grep -e "^*" 

Saya meletakkan skrip ini di folder pengguna ( ~/.bin ). Folder ini dalam $PATH .

Jadi, sekarang saya berada di repositori git, cukup ketik git cbr untuk mencetak nama cabang saat ini.

 $ git cbr * master 

Ini berfungsi karena perintah git mengambil argumen pertamanya dan mencoba menjalankan skrip bernama git-arg1 . Sebagai contoh, git branch mencoba menjalankan skrip bernama git-branch , dll.

10
03 мая '16 в 20:47 2016-05-03 20:47 jawabannya diberikan oleh Diego Pino pada 03 Mei '16 pada 20:47 2016-05-03 20:47

Bagaimana dengan ini?

 { git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##" 
10
11 апр. Balas diberikan oleh ShogunPanda pada 11 April 2013-04-11 20:29 '13 pada 8:29 malam 2013-04-11 20:29

Perintah shell selanjutnya memberi tahu cabang tempat Anda berada.

 git branch | grep ^\* 

Jika Anda tidak ingin memasukkan perintah panjang ini setiap kali Anda ingin belajar cabang, dan menggunakan Bash, beri perintah alias singkat, misalnya, alias cb , misalnya.

 alias cb='git branch | grep ^\*' 

Ketika Anda berada di cabang utama dan $ prompt Anda, Anda akan mendapatkan * master sebagai berikut.

 $ cb * master 
9
17 нояб. jawabannya diberikan oleh mrrusof 17 November 2016-11-17 00:19 '16 pada 0:19 2016-11-17 00:19

Anda dapat secara permanen menyesuaikan output bash Anda untuk menampilkan nama git -branch Anda. Ini sangat nyaman ketika Anda bekerja dengan cabang yang berbeda, Anda tidak perlu mengetikkan $ git status setiap saat. Github repo git -aware-prompt .

Buka terminal (ctrl-alt-t) dan masukkan perintah

 mkdir ~/.bash cd ~/.bash git clone git://github.com/jimeh/git-aware-prompt.git 

Ubah .bashrc Anda dengan sudo nano ~/.bashrc (untuk Ubuntu) dan tambahkan yang berikut di atas:

 export GITAWAREPROMPT=~/.bash/git-aware-prompt source "${GITAWAREPROMPT}/main.sh" 

Kemudian tempel kode tersebut

 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\]\$ " 

Di akhir file yang sama, Anda memasukkan kode instalasi sebelumnya. Ini akan memberi Anda hasil berwarna: 2019

14 окт. balasan yang diberikan oleh Kirill Zhuravlov pada 14 Oktober. 2016-10-14 19:13 '16 pada 19:13 2016-10-14 19:13

Jika Anda benar-benar ingin cabang / tag terakhir dibongkar dalam status HEAD yang terpisah.

 git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev 

Perbarui Lebih baik jika Anda memiliki dan tidak takut awk.

 git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}' 
7
20 авг. jawabannya diberikan Ryan 20 Agustus. 2014-08-20 08:40 '14 pukul 8:40 2014-08-20 08:40

Mengembalikan nama cabang atau SHA1, ketika di kepala terpisah:

 git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD 

Ini adalah versi singkat dari answer @ dmaestro12 dan tanpa dukungan tag.

6
17 окт. jawabannya diberikan pengguna 17 Oktober. 2017-10-17 23:30 '17 pukul 11.30 malam 2017-10-17 23:30

Saya tahu ini terlambat, tetapi di linux / mac, dari terminal Anda dapat menggunakan yang berikut ini.

 git status | sed -n 1p 

Penjelasan:

git status → mendapatkan status pohon yang berfungsi
sed -n 1p → dapatkan baris pertama dari badan status

Jawaban untuk perintah di atas adalah sebagai berikut:

 "On branch your_branch_name" 
5
21 авг. jawaban yang diberikan skippy 21 Agustus. 2014-08-21 01:41 '14 pukul 1:41 pagi 2014-08-21 01:41
 git status 

juga akan memberikan nama cabang beserta perubahannya.

misalnya

 >git status On branch master // <-- branch name here ..... 
5
13 янв. jawabannya diberikan oleh Satheesh Kumar pada 13 Januari 2018-01-13 05:15 '18 pukul 5:15 pagi 2018-01-13 05:15

Tambahkan ke PS1 menggunakan Mac:

 PS1='\W@\u >`[ -d .git ]  git branch | grep ^*|cut -d" " -f2`> $ ' 

Sebelum menjalankan perintah di atas:

2019

31 окт. Jawaban yang diberikan oleh Abdennour TOUMI 31 Okt 2016-10-31 09:56 '16 pada 9:56 2016-10-31 09:56

Anda juga dapat menggunakan variabel GIT_BRANCH, seperti yang ditunjukkan di sini: https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

Plugin git mengatur beberapa variabel lingkungan yang dapat Anda gunakan dalam skrip Anda:

GIT_COMMIT - SHA saat ini

GIT_BRANCH - nama cabang yang digunakan, misalnya. "master" atau "origin / foo"

GIT_PREVIOUS_COMMIT - SHA dari commit yang disematkan sebelumnya dari cabang yang sama (SHA saat ini ketika pertama kali dibangun di cabang)

GIT_URL - URL repositori jarak jauh

GIT_URL_N - repositori URL jarak jauh ketika ada lebih dari 1 remote control, misalnya. GIT_URL_1, GIT_URL_2

GIT_AUTHOR_EMAIL - Email Pengirim / Penulis

GIT_COMMITTER_EMAIL - pesan committer / author

4
11 марта '14 в 12:08 2014-03-11 12:08 jawabannya diberikan oleh user3405314 11 Maret '14 pada 12:08 2014-03-11 12:08
 git branch | grep "*" | sed "s/* //" | awk '{printf $0}' | pbcopy 

Salinan >

2
26 апр. balasan yang diberikan oleh SushiGrass Jacob 26 Apr. 2013-04-26 22:55 '13 jam 10:55 2013-04-26 22:55
  • 1
  • 2

Pertanyaan lain tentang atau Ajukan Pertanyaan