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.
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
Untuk menampilkan cabang saat ini Anda berada, tanpa cabang lain terdaftar, Anda dapat melakukan hal berikut:
git rev-parse --abbrev-ref HEAD
Referensi:
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
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):
Hasil:
git branch | sed -n '/\* /s///p'
master
(detached from Origin/master)
(detached from Origin/feature-foo)
(detached from v1.2.3)
(detached from 285f294)
git status | head -1
# On branch master
# HEAD detached at Origin/master
# HEAD detached at Origin/feature-foo
# HEAD detached at v1.2.3
# HEAD detached at 285f294
# HEAD detached at 285f294
git describe --all
heads/master
heads/master
(catatan: not remotes/Origin/master
)remotes/Origin/feature-foo
v1.2.3
remotes/Origin/HEAD
v1.0.6-5-g2393761
cat .git/HEAD
: ref: refs/heads/master
cat: .git/HEAD: Not a directory
git rev-parse --abbrev-ref HEAD
master
HEAD
git symbolic-ref --short HEAD
master
fatal: ref HEAD is not a symbolic ref
(FYI ini dilakukan dengan git versi 1.8.3.1)
Satu lagi alternatif:
git name-rev --name-only HEAD
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}
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.
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.
git branch | grep -e "^*" | cut -d' ' -f 2
hanya akan menampilkan nama cabang
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!
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
#!/bin/bash
function git.branch {
br=`git branch | grep "*"`
echo ${br/* /}
}
git.branch
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
:
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.
Jika file .git/HEAD
adalah tautan simbolik (kasus yang sangat jarang, dari sejarah kuno Git), ia menggunakan git symbolic-ref HEAD 2>/dev/null
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.
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).
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
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
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
.
feature/HS-0001
v3.29.5
Versi yang kurang berisik untuk status git akan berhasil
git status -bsuno
Mencetak
## branch-name
Di Netbeans, pastikan anotasi versi diaktifkan (Lihat -> Tampilkan Versi Label). Anda kemudian dapat melihat nama cabang di sebelah nama proyek.
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.
Bagaimana dengan ini?
{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
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
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:
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}'
git status
juga akan memberikan nama cabang beserta perubahannya.
misalnya.
>git status
On branch master // <-- branch name here
.....
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.
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"
Tambahkan ke PS1
menggunakan Mac:
PS1='\[email protected]\u >`[ -d .git ] && git branch | grep ^*|cut -d" " -f2`> $ '
Sebelum menjalankan perintah di atas:
Setelah menjalankan perintah itu:
Jangan khawatir, jika ini bukan repositori GIT, itu tidak akan menampilkan kesalahan karena [-d .git]
yang memeriksa apakah folder .git
ada atau tidak.
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
Pada versi 2.22 dari git Anda bisa menggunakan:
git branch --show-current
git branch | grep "*" | sed "s/* //" | awk '{printf $0}' | pbcopy
Untuk secara langsung menyalin hasilnya ke papan tulis. Terima kasih kepada @ olivier-refalo untuk permulaan ...
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
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
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
Gunakan git branch --contains HEAD | tail -1 | xargs
juga berfungsi untuk kondisi "HEAD terlepas".
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
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?