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 git
bash, ini memberitahu saya apa yang saya lakukan.
git
branch
git-branch
mike628
sumber
sumber
.git/HEAD
, mungkin di direktori indukgit branch --show-current
. Lihat jawaban saya di sini .Jawaban:
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:
sumber
git checkout --orphan foo
makagit branch
gagal menunjukkan cabangfoo
. Sedangkangit symbolic-ref HEAD
seperti yang disarankan jawaban lain berhasil.Untuk menampilkan cabang saat ini Anda berada, tanpa cabang lain yang terdaftar, Anda dapat melakukan hal berikut:
Referensi:
sumber
git branch
pertunjukan* (no branch)
, yang juga tidak berguna ...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.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 telah menunjukkannya):
Pada Git v1.7 + Anda juga dapat melakukan:
Keduanya harus memberikan nama cabang yang sama jika Anda menggunakan cabang. Jika Anda bingung, jawabannya berbeda.
sumber
git rev-parse --abbrev-ref HEAD
menunjukkanHEAD
ketika Anda berada di kepala yang terpisah.git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
karena akan menampilkan string sepertiHEAD detached at a63917f
ketika dalam keadaan terpisah, tidak seperti jawaban lain yang tidak menunjukkan apa-apa atau KEPALA. Ini penting.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)
(HEAD detached at 285f294)
(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: tidakremotes/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)
sumber
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.git describe
memiliki kegagalan serius ketika ada beberapa cabang yang mereferensikan komit yang sama, misalnya setelahgit 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 darigit branch
dan hanya menggunakangit describe
jika hasilnya adalah sesuatu tentang head yang terpisah.git branch --no-color
untuk memastikan bahwa nama file bebas dari kode terminal yang mengganggu.Pada versi 2.22 dari git Anda bisa menggunakan:
Sesuai halaman manual:
sumber
Satu lagi alternatif:
sumber
echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
git checkout master && git name-rev --name-only HEAD # ac-187
Tidak berfungsi seperti yang diharapkangit branch --list
hanya mengatakan* (HEAD detached at 7127db5)
. Melakukangit rev-parse --abbrev-ref HEAD
hanya mengatakanHEAD
dan seterusnya.Cukup sederhana, saya mendapatkannya dalam satu liner (bash)
(kredit: Penebusan Terbatas)
Dan sementara saya di sana, liner untuk mendapatkan cabang pelacakan jarak jauh (jika ada)
sumber
sed -n 's/\* //p'
melakukan trik. Meskipun saya cenderung ke arah paranoid jadi saya akan berlabuh dengannyased -n 's/^\* //p'
.Anda bisa mengetikkan command line (console) di Linux, di direktori repositori:
dan Anda akan melihat beberapa teks, di antaranya sesuatu yang mirip dengan:
yang berarti Anda sedang di
master
cabang. 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.sumber
git status
dan hanya mendapatkan baris pertama dari outputgit status | head -1
yang menghasilkan sesuatu seperti# On branch master
. Saya yakin perbedaan versi perlu dipertanggungjawabkan juga.git status | grep 'On branch'
, yang seharusnya memiliki efek yang sama (seharusnya, tidak berarti itu akan terjadi jika versi Git Anda menampilkannya secara berbeda). Ataugit branch | grep '*'
, yang akan menunjukkan nama cabang dengan bintang di awal.<tick>git status | head -1<tick>.gsub('# On branch ', '')
git status
dapat membutuhkan waktu lama untuk mengembalikan nilai jika ada banyak file yang dikelola.git status
dapat mempersingkat waktu pembuatan seluruh halaman.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.
sumber
hanya akan menampilkan nama cabang
sumber
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:
sumber
git branch --contains
terkadang mendaftar lebih dari satu cabang.Menemukan solusi baris perintah dengan panjang yang sama dengan Oliver Refalo , menggunakan ol 'awk yang baik:
awk
membaca 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!sumber
sumber
Mengapa tidak menggunakan prompt shell git-aware, yang akan memberi tahu Anda nama cabang saat ini?
git status
juga membantu.Bagaimana git-prompt.sh dari
contrib/
apakah itu (git versi 2.3.0), sebagaimana didefinisikan dalam__git_ps1
fungsi pembantu: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
.git/HEAD
file tersebut adalah tautan simbolik (kasus yang sangat langka, dari sejarah kuno Git), ia menggunakangit symbolic-ref HEAD 2>/dev/null
Selain itu, ia membaca
.git/HEAD
file. 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/HEAD
adalah symref (referensi simbolik), dan kami berada di cabang normal. Strip awalan ini untuk mendapatkan nama lengkap, dan striprefs/heads/
untuk mendapatkan nama pendek dari cabang saat ini:Jika tidak dimulai
'ref: '
, maka HEAD (cabang anonim) terlepas, menunjuk langsung ke beberapa commit. Gunakangit describe ...
untuk menulis komit saat ini dalam bentuk yang dapat dibaca manusia.Saya harap itu membantu.
sumber
git describe --contains --all HEAD
yang saat ini tidak saya lihat di tempat lain di halaman ini. Karena saya yakin Anda tahu, jawaban tautan saja tidak disarankan di StackOverflow.git-prompt.sh
(alias__git_ps1
) melakukannya ...Versi yang kurang berisik untuk status git akan berhasil
Mencetak
sumber
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:
Ini harus selalu memberi saya sesuatu yang bisa dibaca manusia dan langsung digunakan sebagai argumen
git checkout
.feature/HS-0001
v3.29.5
sumber
git checkout
.Anda dapat menggunakan git bash pada perintah direktori kerja sebagai berikut
itu akan memberi tahu Anda di cabang mana Anda berada, ada banyak perintah yang berguna di antaranya
--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).
sumber
juga akan memberikan nama cabang beserta perubahannya.
misalnya
sumber
Seiring waktu, kami mungkin memiliki daftar cabang yang sangat panjang.
Sementara beberapa solusi lain sangat bagus, Inilah yang saya lakukan (disederhanakan dari jawaban Yakub):
Sekarang,
berfungsi, tetapi hanya jika ada perubahan lokal
sumber
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
sumber
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
sumber
Bagaimana dengan ini?
sumber
symbolic-ref
bagian itu juga perlu--short
menghindari awalan dengan branchnamerefs/heads/
?Saya memiliki skrip sederhana bernama
git-cbr
( cabang saat ini ) yang mencetak nama cabang saat ini.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 cbr
untuk mencetak nama cabang saat ini.Ini berfungsi karena
git
perintah mengambil argumen pertama dan mencoba menjalankan skrip dengan namagit-arg1
. Misalnya,git branch
mencoba menjalankan skrip bernamagit-branch
, dll.sumber
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
Edit .bashrc Anda dengan
sudo nano ~/.bashrc
perintah (untuk Ubuntu) dan tambahkan berikut ini ke atas:Lalu tempel kode
di akhir file yang sama Anda menyisipkan kode instalasi ke sebelumnya. Ini akan memberi Anda keluaran berwarna:
sumber
Perintah shell berikut memberi tahu Anda cabang tempat Anda berada saat ini.
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.Saat Anda berada di master cabang dan prompt Anda adalah
$
, Anda akan mendapatkan* master
sebagai berikut.sumber
git branch | grep '^\*'
Mengembalikan nama cabang atau SHA1 saat di kepala terpisah:
Ini adalah versi singkat dari jawaban @dmaestro12 dan tanpa dukungan tag.
sumber
git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
Jika Anda benar-benar ingin cabang / tag terakhir diperiksa dalam kondisi HEAD yang terlepas juga.
Perbarui Ini lebih baik jika Anda memiliki dan tidak takut awk.
sumber
rev | cut -d' ' -f1| rev
dapat disederhanakan denganawk '{print $NF}'
checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9
masih merupakan trik yang berguna yang mungkin membantu untuk menyamarkan beberapa kasus.git reflog | awk '$3=="checkout:" {print $NF; exit}'
Saya tahu ini terlambat tetapi di linux / mac, dari terminal Anda dapat menggunakan yang berikut ini.
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:
sumber
head -1
akan seperti biasaAnda 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
sumber
Tambahkan ke
PS1
menggunakan Mac:Sebelum menjalankan perintah di atas:
Setelah menjalankan perintah itu:
Jangan khawatir, jika itu bukan repositori GIT, itu tidak akan menampilkan kesalahan karena
[-d .git]
yang memeriksa apakah.git
folder ada atau tidak.sumber