Bagaimana cara mendapatkan nama cabang saat ini di Git?

2595

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

Tetapi dengan Git saya tidak yakin ketika saya mengedit file di NetBeans atau Notepad ++, apakah itu terkait dengan master atau cabang lain.

Tidak ada masalah dengan gitbash, ini memberitahu saya apa yang saya lakukan.

mike628
sumber
11
Biarkan IDE Anda menampilkan file .git/HEAD, mungkin di direktori induk
Tino
101
stackoverflow.com/questions/1417957/… $ git rev-parse --abbrev-ref HEAD
fantastory
7
Kemungkinan duplikat Tunjukkan hanya cabang saat ini di Git
techraf
9
Dengan Git 2.22 (Q2 2019), Anda akan memiliki pendekatan yang lebih sederhana: git branch --show-current. Lihat jawaban saya di sini .
VonC

Jawaban:

2305
git branch

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

Jika Anda hanya ingin mengambil nama cabang tempat Anda berada, Anda dapat melakukan:

git rev-parse --abbrev-ref HEAD
roberttdev
sumber
Tapi itu tidak membantu saya dengan Notepad ++ dan Netbeans. Hanya git bash (dan Probobly Vim) dan saya sebutkan itu. Saya siap bekerja dengan editor Ide dan teks lain yang bukan baris perintah.
mike628
@ mike628 Sebenarnya mereka membantu Anda kecuali Anda menginginkan sesuatu yang dapat diakses melalui GUI. Benar?
Tadeck
2
Jika Anda bersedia bekerja di Eclipse, ada program yang disebut "eGit" yang memiliki GUI yang akan memberi tahu Anda cabang saat ini untuk semua repo di dalamnya. Kalau tidak, saya tidak tahu .. Anda akan berada di tangan pembuat plugin apa pun yang ingin Anda gunakan yang kompatibel dengan program pilihan Anda (jika ada).
roberttdev
2
setelah melakukan git checkout --orphan foomaka git branchgagal menunjukkan cabang foo. Sedangkan git symbolic-ref HEADseperti yang disarankan jawaban lain berhasil.
Marcus Junius Brutus
2
downvote, kami hanya menginginkan cabang saat ini sebagai stdout, tidak semua cabang
Alexander Mills
4657

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

git rev-parse --abbrev-ref HEAD

Referensi:

Jistanidiot
sumber
132
@ ChrisNelson, karena hanya menampilkan cabang saat ini, bukan daftar panjang semua cabang.
avakar
73
Bagus, sayangnya itu tidak berfungsi jika Anda berada dalam keadaan 'HEAD terpisah' (itu hanya output 'KEPALA', yang sama sekali tidak berguna).
Carlos Campderrós
34
Saya kira oleh internal git jika Anda berada dalam keadaan 'HEAD terpisah' tidak ada pelacakan cabang miliknya, karena git branchpertunjukan * (no branch), yang juga tidak berguna ...
Carlos Campderrós
76
"git symbolic-ref - short HEAD" juga berfungsi untuk tujuan yang sama
dusktreader
22
git rev-parse --abbrev-ref HEAD 2>/dev/null Bagian / dev / null mencegah Anda melihat kesalahan jika Anda baru saja membuat repositori baru yang belum HEAD.
Paradiesstaub
523

Anda juga memiliki git symbolic-ref HEADyang menampilkan refspec lengkap.

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

git symbolic-ref --short HEAD

Pada Git v1.7 + Anda juga dapat melakukan:

git rev-parse --abbrev-ref HEAD

Keduanya harus memberikan nama cabang yang sama jika Anda menggunakan cabang. Jika Anda bingung, jawabannya berbeda.

catatan:

Pada klien sebelumnya, ini tampaknya berhasil:

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

- Darien 26. Mar 2014

Wernight
sumber
7
Seperti semua jawaban lainnya, ini tidak berfungsi ketika Anda berada dalam kondisi 'HEAD terpisah'
Carlos Campderrós
51
@ CarlosCampderrós: ​​jika Anda dalam kondisi HEAD yang terpisah, tidak ada yang namanya cabang saat ini. Lagi pula, komit yang Anda masuki dapat dijangkau dengan nol, satu atau lebih cabang.
Flimm
2
ini membuat masalah dalam repositori git kosong ketika tidak ada KEPALA
Arne
8
Dengan git versi 2.4.4 git rev-parse --abbrev-ref HEADmenunjukkan HEADketika Anda berada di kepala yang terpisah.
peterhil
Jawaban terbaik masih git symbolic-ref HEAD | sed -e "s/^refs\/heads\///" karena akan menampilkan string seperti HEAD detached at a63917fketika dalam keadaan terpisah, tidak seperti jawaban lain yang tidak menunjukkan apa-apa atau KEPALA. Ini penting.
Bernard
265

Untuk referensi saya sendiri (tetapi mungkin bermanfaat bagi orang lain) saya membuat ikhtisar dari sebagian besar (baris perintah dasar) teknik yang disebutkan dalam utas ini, masing-masing diterapkan pada beberapa kasus penggunaan: HEAD is (menunjuk):

  • cabang lokal (master)
  • cabang pelacakan jarak jauh, sinkron dengan cabang lokal (asal / master pada komit yang sama seperti master)
  • cabang pelacakan jarak jauh, tidak sinkron dengan cabang lokal (asal / fitur-foo)
  • tag (v1.2.3)
  • submodule (jalankan di dalam direktori submodule)
  • kepala terpisah umum (tidak ada di atas)

Hasil:

  • git branch | sed -n '/\* /s///p'
    • cabang lokal: master
    • cabang pelacakan jarak jauh (sinkron): (detached from origin/master)
    • cabang pelacakan jarak jauh (tidak sinkron): (detached from origin/feature-foo)
    • menandai: (detached from v1.2.3)
    • submodule: (HEAD detached at 285f294)
    • kepala terpisah umum: (detached from 285f294)
  • git status | head -1
    • cabang lokal: # On branch master
    • cabang pelacakan jarak jauh (sinkron): # HEAD detached at origin/master
    • cabang pelacakan jarak jauh (tidak sinkron): # HEAD detached at origin/feature-foo
    • menandai: # HEAD detached at v1.2.3
    • submodule: # HEAD detached at 285f294
    • kepala terpisah umum: # HEAD detached at 285f294
  • git describe --all
    • cabang lokal: heads/master
    • cabang pelacakan jarak jauh (sinkron): heads/master(catatan: tidak remotes/origin/master )
    • cabang pelacakan jarak jauh (tidak sinkron): remotes/origin/feature-foo
    • menandai: v1.2.3
    • submodule: remotes/origin/HEAD
    • kepala terpisah umum: v1.0.6-5-g2393761
  • cat .git/HEAD:
    • cabang lokal: ref: refs/heads/master
    • submodule: cat: .git/HEAD: Not a directory
    • semua kasus penggunaan lainnya: SHA dari komit yang sesuai
  • git rev-parse --abbrev-ref HEAD
    • cabang lokal: master
    • semua kasus penggunaan lainnya: HEAD
  • git symbolic-ref --short HEAD
    • cabang lokal: master
    • semua kasus penggunaan lainnya: fatal: ref HEAD is not a symbolic ref

(FYI ini dilakukan dengan git versi 1.8.3.1)

Stefaan
sumber
6
Singkatnya, tidak ada yang melakukan apa pun yang saya lakukan dengan tangan.
bukzor
6
Ini cukup membantu bagi saya: git describe --all --exact-match 2>/dev/null | sed 's=.*/=='adalah solusi terbaik bagi saya (nama baik untuk tag dan kepala cabang, tidak ada output untuk kepala terpisah acak.
Alex Dupuy
1
Namun, saya baru saja menemukan bahwa menggunakan git describememiliki kegagalan serius ketika ada beberapa cabang yang mereferensikan komit yang sama, misalnya setelah git checkout -b foo- menggunakan salah satu dari mereka secara sewenang-wenang (sepertinya mungkin yang paling baru dibuat). Saya akan mengubah strategi saya untuk menggunakan output yang difilter dari git branchdan hanya menggunakan git describejika hasilnya adalah sesuatu tentang head yang terpisah.
Alex Dupuy
Sebenarnya, saya perlu menggunakan git branch --no-coloruntuk memastikan bahwa nama file bebas dari kode terminal yang mengganggu.
Alex Dupuy
2
Ini sangat membantu saya lebih dari sekali, terima kasih sudah teliti!
Alice Purcell
154

Pada versi 2.22 dari git Anda bisa menggunakan:

git branch --show-current

Sesuai halaman manual:

Cetak nama cabang saat ini. Dalam kondisi HEAD yang terlepas, tidak ada yang dicetak.

Maks
sumber
2
Ya, saya menyebutkan bahwa Maret lalu di komentar halaman itu: stackoverflow.com/questions/6245570/… . Dan di stackoverflow.com/a/55088865/6309 .
VonC
5
Setidaknya menyebutkan ini tidak berfungsi dalam keadaan KEPALA terlepas. Baru saja kehilangan jam, mendapatkan git 2.22 untuk dikompilasi tanpa biaya ...
David Deprost
136

Satu lagi alternatif:

git name-rev --name-only HEAD
Filip Spiridonov
sumber
itu juga dapat diambil dengan echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
Antoine
12
Tidak berfungsi jika HEAD sama untuk cabang master dan fitur (mis. Saat penggabungan). Ia mengembalikan 'master' walaupun dijalankan di cabang fitur.
Orest Hera
1
git checkout master && git name-rev --name-only HEAD # ac-187Tidak berfungsi seperti yang diharapkan
Alexander Abashkin
Saya menyimpan ini ke dalam variabel sesaat sebelum penggabungan dan juga dalam kasus-kasus KEPALA saya mungkin akan de-lampiran jika saya checkout komit tertentu. Dalam hal ini ini berfungsi dengan baik.
Ishaan Sejwal
4
Saya melakukan ini dari pipa Jenkins. Jadi ini tampaknya untuk saat ini menjadi jawaban terbaik bagi saya. Melakukan git branch --listhanya mengatakan * (HEAD detached at 7127db5). Melakukan git rev-parse --abbrev-ref HEADhanya mengatakan HEADdan seterusnya.
Mig82
91

Cukup sederhana, saya mendapatkannya dalam satu liner (bash)

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

(kredit: Penebusan Terbatas)

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

git rev-parse --symbolic-full-name --abbrev-ref @{u}
Olivier Refalo
sumber
8
Terlalu banyak tebasan! :) sed -n 's/\* //p'melakukan trik. Meskipun saya cenderung ke arah paranoid jadi saya akan berlabuh dengannya sed -n 's/^\* //p'.
Mark Reed
65

Anda bisa mengetikkan command line (console) di Linux, di direktori repositori:

$ git status

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

...
On branch master
...

yang berarti Anda sedang di mastercabang. Jika Anda mengedit file apa pun pada saat itu dan terletak di repositori lokal yang sama (direktori lokal yang berisi file-file yang berada di bawah manajemen kontrol versi Git), Anda sedang mengedit file di cabang ini.

Tadeck
sumber
2
Berdasarkan apa yang ingin Anda lakukan, Anda dapat menggunakan git statusdan hanya mendapatkan baris pertama dari output git status | head -1yang menghasilkan sesuatu seperti # On branch master. Saya yakin perbedaan versi perlu dipertanggungjawabkan juga.
Joshua Pinter
@JoshPinter: Anda juga dapat menggunakan git status | grep 'On branch', yang seharusnya memiliki efek yang sama (seharusnya, tidak berarti itu akan terjadi jika versi Git Anda menampilkannya secara berbeda). Atau git branch | grep '*', yang akan menunjukkan nama cabang dengan bintang di awal.
Tadeck
Yap, itu bekerja juga dan mungkin lebih fleksibel. Hasil akhir saya untuk menunjukkan hanya nama cabang di aplikasi dev Rails adalah:<tick>git status | head -1<tick>.gsub('# On branch ', '')
Joshua Pinter
1
git statusdapat membutuhkan waktu lama untuk mengembalikan nilai jika ada banyak file yang dikelola.
the Tin Man
Ya, jika Anda ingin mencetak cabang pada halaman web, misalnya, git statusdapat mempersingkat waktu pembuatan seluruh halaman.
Artem Russakovskii
36
git symbolic-ref -q --short HEAD

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

Kousha
sumber
1
Terima kasih, berhasil! - Saya juga menambahkan "-C path_to_folder" dalam skrip saya dengan ini.
Tony
1
Ini adalah solusi yang bagus karena dengan opsi -q ia mengembalikan kode kesalahan dalam keadaan "terlepas kepala" tetapi tidak mencetak apa pun ke stderr.
Hallidave
ini adalah satu-satunya solusi yang bekerja untuk saya pada repo baru tanpa komitmen
kundasaba
26
git branch | grep -e "^*" | cut -d' ' -f 2

hanya akan menampilkan nama cabang

ungalcrys
sumber
Jika cabang Anda menunjukkan sesuatu seperti ini "* (HEAD detached at SUM_BRANCH_01)", maka coba ini "git branch | grep -e" ^ * "| cut -d '' -f 5 | cut -d ')' -f 1 "
Dylan Kapp
Saya baru saja membuat skrip yang sama persis untuk mendapatkan nama cabang saat ini. Saya pikir itu mungkin membantu dengan diff.
tggagne
25

git branch hanya tampilkan nama cabang saat ini.

Sementara git branch akan menunjukkan kepada Anda semua cabang dan menyorot yang sekarang dengan tanda bintang, itu bisa terlalu rumit ketika bekerja dengan banyak cabang.

Untuk hanya menampilkan cabang tempat Anda berada saat ini, gunakan:

git rev-parse --abbrev-ref HEAD
Lawrence Paje
sumber
ini bagus untuk ci, dan alat bantu bangunan lainnya!
phouse512
jawaban terbaik untuk menggunakannya dalam naskah
Ben Keil
1
@DylanNicholson git branch --containsterkadang mendaftar lebih dari satu cabang.
Joe Chacko
22

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

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

awkmembaca bahwa sebagai "melakukan hal-hal {}pada baris yang cocok dengan regex". Secara default ini mengasumsikan bidang yang dibatasi spasi, jadi Anda mencetak yang kedua. Jika Anda dapat berasumsi bahwa hanya baris dengan cabang Anda yang memiliki *, Anda dapat menghapus ^. Ah, main golf!

Silas Barta
sumber
19
#!/bin/bash
function git.branch {
  br=`git branch | grep "*"`
  echo ${br/* /}
}
git.branch
Dziamid
sumber
18

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


Bagaimana git-prompt.sh dari contrib/apakah itu (git versi 2.3.0), sebagaimana didefinisikan dalam __git_ps1fungsi pembantu:

  1. Pertama, ada kasus khusus jika rebase sedang berlangsung terdeteksi. Git menggunakan cabang tanpa nama (HEAD terlepas) selama proses rebase untuk menjadikannya atom, dan cabang asli disimpan di tempat lain.

  2. Jika .git/HEADfile tersebut adalah tautan simbolik (kasus yang sangat langka, dari sejarah kuno Git), ia menggunakangit symbolic-ref HEAD 2>/dev/null

  3. Selain itu, ia membaca .git/HEADfile. Langkah selanjutnya tergantung pada isinya:

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

    • Jika dimulai dengan 'ref: 'awalan, maka .git/HEADadalah symref (referensi simbolik), dan kami berada di cabang normal. Strip awalan ini untuk mendapatkan nama lengkap, dan strip refs/heads/untuk mendapatkan nama pendek dari cabang saat ini:

      b="${head#ref: }"
      # ...
      b=${b##refs/heads/}
      
    • Jika tidak dimulai 'ref: ', maka HEAD (cabang anonim) terlepas, menunjuk langsung ke beberapa commit. Gunakan git describe ...untuk menulis komit saat ini dalam bentuk yang dapat dibaca manusia.

Saya harap itu membantu.

Jakub Narębski
sumber
3
Dan jika Anda mengembangkan prompt shell git-aware, jawaban mana yang harus Anda gunakan? Turtles sampai ke bawah.
tripleee
1
@tripleee: Pinjam ide dari github.com/git/git/blob/master/contrib/completion/git-prompt.sh
Jakub Narębski
4
Yang mana untuk catatan tampaknya melakukan git describe --contains --all HEADyang saat ini tidak saya lihat di tempat lain di halaman ini. Karena saya yakin Anda tahu, jawaban tautan saja tidak disarankan di StackOverflow.
tripleee
2
@tripleee: Saya telah menambahkan penjelasan bagaimana git-prompt.sh(alias __git_ps1) melakukannya ...
Jakub Narębski
17

Versi yang kurang berisik untuk status git akan berhasil

git status -bsuno

Mencetak

## branch-name
dgolovin
sumber
1
## kembangkan ... asal / kembangkan
Kalpesh Soni
16

Maaf ini adalah jawaban baris perintah yang lain, tetapi itulah 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 manusia dan langsung digunakan sebagai argumen git checkout.

  • di cabang lokal: feature/HS-0001
  • pada komit yang ditandai (terlepas): v3.29.5
  • pada cabang jauh (terlepas, tidak ditandai): SHA1
  • pada komit terlepas lainnya: SHA1
dmaestro12
sumber
1
Terima kasih telah memposting ini, tidak ada jawaban lain yang peduli untuk selalu menghasilkan sesuatu yang dapat digunakan sebagai argumen git checkout.
zwol
15

Anda dapat menggunakan git bash pada perintah direktori kerja sebagai berikut

git status -b

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

-s

--short Berikan output dalam format pendek.

-b --branch Menampilkan cabang dan info pelacakan bahkan dalam format pendek.

--porcelain [=] Berikan output dalam format skrip yang mudah diurai. Ini mirip dengan keluaran 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 default ke format versi v1 asli.

--long Berikan output dalam format panjang. Ini standarnya.

-v --verbose Selain nama-nama file yang telah diubah, juga perlihatkan perubahan tekstual yang dipentaskan untuk dikomit (yaitu, seperti keluaran dari git diff --cached). Jika -v ditentukan dua kali, maka juga menunjukkan perubahan pada pohon kerja yang belum dipentaskan (yaitu, seperti output dari git diff).

Prateek Gangwal
sumber
14
git status 

juga akan memberikan nama cabang beserta perubahannya.

misalnya

>git status
On branch master // <-- branch name here
.....
Satheesh Kumar
sumber
13

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

Sementara beberapa solusi lain sangat bagus, Inilah yang saya lakukan (disederhanakan dari jawaban Yakub):

git branch | grep \*

Sekarang,

git status

berfungsi, tetapi hanya jika ada perubahan lokal

karthikr
sumber
13

Saya merekomendasikan menggunakan salah satu dari dua perintah ini.

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

ATAU

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

jackotonye
sumber
12

Di Netbeans, pastikan anotasi versi diaktifkan (Lihat -> Tampilkan Label Versi). Anda kemudian dapat melihat nama cabang di sebelah nama proyek.

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

Saroj
sumber
Dengan mengaktifkan anotasi versi, maka yang perlu Anda lakukan adalah mengarahkan mouse Anda ke folder Project (atau File, atau Favorite) untuk melihat cabang saat ini.
idclaar
12

Bagaimana dengan ini?

{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
ShogunPanda
sumber
1
Jawabannya jauh lebih baik karena menangani kasus HEAD yang terlepas dengan baik.
Pat
2
Sepertinya Anda harus menggunakan () bukan {} untuk membungkus perintah git
Pat
@Pat Tidak perlu menelurkan subkulit terpisah untuk ini, seperti () akan lakukan. {} tidak masalah, kecuali Anda perlu menambahkan; atau baris baru sebelum}. Sebenarnya, Anda bisa mengabaikan {} seluruhnya kecuali Anda perlu mengelompokkan perintah.
aij
Bukankah symbolic-refbagian itu juga perlu --shortmenghindari awalan dengan branchname refs/heads/?
rjp
11

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 khusus ( ~/.bin). Folder itu ada di $PATH.

Jadi sekarang ketika saya berada di git repo, saya cukup mengetik git cbruntuk mencetak nama cabang saat ini.

$ git cbr
* master

Ini berfungsi karena gitperintah mengambil argumen pertama dan mencoba menjalankan skrip dengan nama git-arg1. Misalnya, git branchmencoba menjalankan skrip bernama git-branch, dll.

Diego Pino
sumber
11

Anda dapat secara permanen mengatur output bash Anda untuk menampilkan nama git-branch Anda. Sangat berguna saat Anda bekerja dengan cabang yang berbeda, tidak perlu mengetik $ git statussepanjang waktu. Github repo git-aware-prompt .

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

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

Edit .bashrc Anda dengan sudo nano ~/.bashrcperintah (untuk Ubuntu) dan tambahkan berikut ini ke atas:

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

Lalu tempel kode

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 menyisipkan kode instalasi ke sebelumnya. Ini akan memberi Anda keluaran berwarna:masukkan deskripsi gambar di sini

Kirill Zhuravlov
sumber
10

Perintah shell berikut memberi tahu Anda cabang tempat Anda berada saat ini.

git branch | grep ^\*

Ketika Anda tidak ingin mengetikkan perintah panjang itu setiap kali Anda ingin tahu cabang dan Anda menggunakan Bash, berikan perintah itu alias pendek, misalnya alias cb, seperti begitu.

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

Saat Anda berada di master cabang dan prompt Anda adalah $, Anda akan mendapatkan * mastersebagai berikut.

$ cb
* master
mrrusof
sumber
Ini tidak memberikan jawaban untuk pertanyaan itu. Untuk mengkritik atau meminta klarifikasi dari penulis, tinggalkan komentar di bawah posting mereka. - Dari Ulasan
Rashwan L
1
Mengapa menurut Anda begitu?
mrrusof
Anda harus berkomentar dan mendeskripsikan posting Anda untuk OP, dengan cara itu akan lebih mudah untuk memahami posting Anda.
Rashwan L
1
Masuk akal.
mrrusof
1
jika Anda menggunakan zsh, Anda harus membungkus grep regex dengan tanda kutip tunggal:git branch | grep '^\*'
aaaarrgh
9

Mengembalikan nama cabang atau SHA1 saat di kepala terpisah:

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

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

pengguna
sumber
8
lebih baik:git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
blueyed
8

Jika Anda benar-benar ingin cabang / tag terakhir diperiksa dalam kondisi HEAD yang terlepas juga.

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

Perbarui Ini lebih baik jika Anda memiliki dan tidak takut awk.

git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
Ryan
sumber
yang rev | cut -d' ' -f1| revdapat disederhanakan denganawk '{print $NF}'
Steve Buzonas
1
Walaupun ini juga tidak mudah, karena Anda dapat mengecek revisi tertentu dengan hash, sehingga reflog hanya menunjukkannya checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9masih merupakan trik yang berguna yang mungkin membantu untuk menyamarkan beberapa kasus.
Alex Dupuy
1
Selanjutnya dipersingkat menjadi git reflog | awk '$3=="checkout:" {print $NF; exit}'
dipersingkat
6

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

git status | sed -n 1p

Penjelasan:

git status -> mendapat status pohon kerja
sed -n 1p -> mendapat baris pertama dari badan status

Respons terhadap perintah di atas akan terlihat sebagai berikut:

"On branch your_branch_name"
lalai
sumber
2
head -1akan seperti biasa
bukzor
5

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

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

GIT_COMMIT - SHA saat ini

GIT_BRANCH - Nama cabang yang sedang digunakan, mis. "Master" atau "origin / foo"

GIT_PREVIOUS_COMMIT - SHA dari komit dibangun sebelumnya dari cabang yang sama (SHA saat ini pada cabang build pertama di)

GIT_URL - URL jarak jauh repositori

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

GIT_AUTHOR_EMAIL - Email Pengirim / Penulis

GIT_COMMITTER_EMAIL - Email Pengirim / Penulis

pengguna3405314
sumber
5

Tambahkan ke PS1menggunakan Mac:

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

Sebelum menjalankan perintah di atas:

masukkan deskripsi gambar di sini

Setelah menjalankan perintah itu:

masukkan deskripsi gambar di sini

Jangan khawatir, jika itu bukan repositori GIT, itu tidak akan menampilkan kesalahan karena [-d .git]yang memeriksa apakah .gitfolder ada atau tidak.

Abdennour TOUMI
sumber