pengembangan-web-mp-pd.com

Bagaimana cara mendapatkan nama cabang saat ini di Git?

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 kapan saya mengedit file di NetBeans atau Notepad ++, apakah itu terkait dengan master atau cabang lain.

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

1927
mike628
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 branch | grep \* | cut -d ' ' -f2
1530
roberttdev

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

git rev-parse --abbrev-ref HEAD

Referensi:

4006
Jistanidiot

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

Untuk hanya menampilkan nama cabang di Git v1.8 dan yang lebih baru (terima kasih kepada Greg karena 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

444
Wernight

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)
    • tag: (detached from v1.2.3)
    • submodule: `(HEAD terlepas di 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
    • tag: # 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 jauh (sinkron): heads/master (catatan: not remotes/Origin/master)
    • cabang pelacakan jarak jauh (tidak sinkron): remotes/Origin/feature-foo
    • tag: 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)

198
Stefaan

Satu lagi alternatif:

git name-rev --name-only HEAD
126

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}
89
Olivier Refalo

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 saat ini berada di cabang master. Jika Anda mengedit file apa pun pada saat itu dan terletak di repositori lokal yang sama (direktori lokal berisi file yang berada di bawah manajemen kontrol versi Git), Anda sedang mengedit file di cabang ini.

59
Tadeck
git symbolic-ref -q --short HEAD

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

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

hanya akan menampilkan nama cabang

24
ungalcrys

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

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

awk membaca bahwa "lakukan hal-hal di {} 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!

21
Silas Barta

git branch hanya menampilkan nama cabang saat ini.

Sementara git branch akan menampilkan semua cabang dan menyorot yang sekarang dengan asterisk, 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
20
Lawrence Paje
#!/bin/bash
function git.branch {
  br=`git branch | grep "*"`
  echo ${br/* /}
}
git.branch
17
Dziamid

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


Bagaimana git-Prompt.sh dari contrib/ melakukannya (git versi 2.3.0), sebagaimana didefinisikan dalam fungsi pembantu helper __git_ps1:

  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 file .git/HEAD adalah tautan simbolik (kasus yang sangat jarang, dari sejarah kuno Git), ia menggunakan git symbolic-ref HEAD 2>/dev/null

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

    • 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 (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 dengan 'ref: ', maka itu terlepas HEAD (cabang anonim), menunjuk langsung ke beberapa komit. Gunakan git describe ... untuk menulis komit saat ini dalam bentuk yang dapat dibaca manusia.

Saya harap itu membantu.

15
Jakub Narębski

anda dapat menggunakan git bash pada direktori kerja Perintah adalah 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--branchTampilkan 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 (mis., seperti output dari git berbeda --cached). Jika -v ditentukan dua kali, maka juga menunjukkan perubahan pada pohon kerja yang belum dipentaskan (mis., Seperti output dari git diff).

14
Prateek Gangwal

Saya merekomendasikan menggunakan salah satu dari dua perintah ini.

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

OR

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
jackotonye

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

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

git branch | grep \*

Sekarang,

git status

berfungsi, tetapi hanya Jika ada perubahan lokal

12
karthikr

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 dapat digunakan sebagai argumen untuk git checkout.

  • di cabang lokal: feature/HS-0001
  • pada komitmen yang ditandai (terlepas): v3.29.5
  • pada cabang jauh (terlepas, tidak ditandai): SHA1
  • pada komit terlepas lainnya: SHA1
12
dmaestro12

Versi yang kurang berisik untuk status git akan berhasil

git status -bsuno

Mencetak

## branch-name
11
dgolovin

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

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

11
Saroj

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 ada di $PATH.

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

$ git cbr
* master

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

10
Diego Pino

Bagaimana dengan ini?

{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
10
ShogunPanda

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 mengetahui cabang dan Anda menggunakan Bash, berikan perintah tersebut alias pendek, misalnya alias cb, seperti itu.

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

Ketika Anda berada di master cabang dan Prompt Anda adalah $, Anda akan mendapatkan * master sebagai berikut.

$ cb
* master
9
mrrusof

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 status sepanjang 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 perintah Sudo nano ~/.bashrc (untuk Ubuntu) dan tambahkan yang berikut ke atas:

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

Kemudian tempel kode tersebut 

export PS1="\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\] \[$txtcyn\]\$git_branch\[$txtred\]\$git_dirty\[$txtrst\]\$ "

di akhir file yang sama dengan yang Anda tempelkan kode instalasi sebelumnya. Ini akan memberi Anda keluaran berwarna:  enter image description here

8
Kirill Zhuravlov

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

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

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

git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
7
Ryan
git status 

juga akan memberikan nama cabang beserta perubahannya.

misalnya.

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

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.

6
user

Saya tahu ini terlambat tetapi pada 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"
5
skippy

Tambahkan ke PS1 menggunakan Mac: 

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

Sebelum menjalankan perintah di atas: 

 enter image description here

Setelah menjalankan perintah itu: 

 enter image description here

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

4
Abdennour TOUMI

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 (saat ini SHA pada cabang build in pertama)

GIT_URL - URL jarak jauh repositori

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

GIT_AUTHOR_EMAIL - Email Pengirim/Penulis

GIT_COMMITTER_EMAIL - Email Pengirim/Penulis

4
user3405314

Pada versi 2.22 dari git Anda bisa menggunakan:

git branch --show-current
4
Max
git branch | grep "*" | sed "s/* //" | awk '{printf $0}' | pbcopy

Untuk secara langsung menyalin hasilnya ke papan tulis. Terima kasih kepada @ olivier-refalo untuk permulaan ...

2
SushiGrass Jacob

Menggunakan ide-ide sebelumnya; dengan asumsi sha1 adalah 40 karakter; dan mengejar referensi (ya, harus menghapus garis cetak debug :-):

git reflog | awk '
$3 == "checkout:" && (sha == "" || sha == $1 ) {
  from=$(NF - 2)
  to=$NF
  print from, to, length(from) > "/dev/stderr"
  if (length(from) != 40) { print from ; exit; }
  sha=substr(from, 1, 7)
  print sha > "/dev/stderr"
}
'

memberikan output mentah:

$ git status
HEAD detached at 147049c
[...]
$ ./gime-branch.sh
a47be8d2167641088b66bf8f5c2bf7d3da0c642c HEAD^ 40
a47be8d
master HEAD^ 6
master
2
cagney

Cukup, tambahkan baris berikut ke ~/.bash_profile Anda:

branch_show() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\[email protected]\h \[\033[32m\]\w\[\033[33m\]\$(branch_show)\[\033[00m\] $ "

Dengan cara ini, Anda dapat memiliki nama cabang saat ini di Terminal

Atas perkenan Coderwall.com

1
SHi ON

Anda dapat melakukannya dengan instruksi grep tunggal, menggunakan mode Perl dan \K untuk mengatur ulang buffer pertandingan, sehingga Anda hanya mendapatkan nama cabang.

$ git branch | grep -oP "^\*\s+\K\S+$"
master
0
Joseph Lust

Gunakan git branch --contains HEAD | tail -1 | xargs juga berfungsi untuk kondisi "HEAD terlepas".

0
glisu

Dapatkan hanya nama cabang lokal:

git status -b -u no | awk 'NR==1{print $3;}'

Dapatkan hanya nama cabang jarak jauh:

git status -b -u no | awk 'NR==2{print $6;}'

dan git status -b -u no | awk 'NR==2{print $6;}' | tr -d "[.']" untuk menghapus karakter khusus dari output

0
v.babak

Saya tahu ini sudah dijawab, tetapi dalam versi terbaru dari Git, perintah git branch membuka daftar cabang Anda di semacam Prompt yang harus Anda hentikan. Yang mengganggu saya tanpa akhir!

Inilah perbaikan saya: Buka profil bash Anda dan ketik ini:

#!/bin/bash
git() {
  if [[ [email protected] == "branch" ]] then
    command git branch -a | grep -v 'remotes'
  else
    command git "[email protected]"
  fi
}

Sekarang buka Terminal dan uji dengan mengetikkan perintah berikut dalam git repo:

source ~/.zshrc
git branch 

Dan voila! Daftar cabang lokal Anda dicetak di terminal Anda.

Kode yang Anda tulis ke file bashrc Anda menimpa fungsi default untuk git branch dan menggantinya dengan perintah yang lebih lama yang mencantumkan semua cabang lokal melalui argumen -a. Kemudian kami grep keluar bisnis yang tidak diperlukan dan mencetaknya. Jika Anda mengecualikan perintah grep Anda masih akan mendapatkan Prompt yang mengganggu. Jika Anda tidak terbiasa dengan menulis perintah bash checkout penjelasan ini: Tentang .bash_profile, .bashrc, dan di mana alias harus ditulis?

0
okTalk