Saya tahu saya bisa melakukannya git branch --all
, dan itu menunjukkan kepada saya cabang lokal dan remote, tetapi itu tidak berguna dalam menunjukkan kepada saya hubungan di antara mereka.
Bagaimana cara mendaftar cabang dengan cara yang memperlihatkan cabang lokal mana yang melacak jarak jauh?
git remote show origin
Ganti 'asal' dengan apa pun nama remote Anda.
sumber
git remote show
perintah sebenarnya terhubung ke repo jarak jauh ... dan karenanya gagal jika Anda offline atau tidak dapat terhubung ke repo untuk alasan apa pun ...git remote show -n origin
untuk mendapatkan beberapa informasi bahkan saat offline. Dari dokumentasi remote git : "Dengan opsi -n, head remote tidak ditanyai terlebih dahulu dengan git ls-remote <name>; informasi yang di-cache malah digunakan."git remote show | xargs git remote show -n
untuk melihat info pelacakan gabungan untuk semua remote.Jika Anda melihat halaman manual untuk
git-rev-parse
, Anda akan melihat sintaks berikut dijelaskan:Karenanya untuk menemukan hulu cabang
master
, Anda akan melakukan:Untuk mencetak informasi untuk setiap cabang, Anda dapat melakukan sesuatu seperti:
Ini lebih bersih daripada mem-parsing referensi dan mengkonfigurasi secara manual.
sumber
done < <(git for-each-ref --format='%(refname:short)' refs/heads/**)
Perhatikan dua tanda bintang di akhir pola glob.git rev-parse --abbrev-ref HEAD@{upstream}
tampaknya berfungsi dengan baik untuk cabang saat ini. Itu juga membuat alias git bagus.while
sintaks lingkaran terlihat agak aneh bagi saya. Anda bisa menggunakangit for-each-ref ... | while read branch; do ...
yang tidak membutuhkan FIFO dan berjalan dalam urutan yang sama seperti perintah yang ditulis.git for-each-ref --format='%(refname:short) tracks %(upstream:short)' refs/heads/*
Alternatif jawaban kubi adalah dengan melihat
.git/config
file yang memperlihatkan konfigurasi repositori lokal:cat .git/config
sumber
git config --get-regex branch
akan menampilkan garis untuk setiap cabang lokal. Cabang pelacakan akan terlihat seperti:
Yang tidak terlacak akan terlihat seperti:
sumber
git branch -vv
. 🙏git config --global alias.track 'for-each-ref --format='\''%(refname:short) <- %(upstream:short)'\'' refs/heads'
Untuk cabang saat ini , berikut adalah dua pilihan bagus:
atau
Jawaban itu juga ada di sini , untuk pertanyaan yang sedikit berbeda yang (salah) ditandai sebagai duplikat.
sumber
git for-each-ref --shell --format='%(refname:short) %(upstream:short)' refs/heads
.Untuk cabang saat ini, Anda juga bisa mengatakan
git checkout
(tanpa cabang apa pun). Ini adalah no-op dengan efek samping untuk menampilkan informasi pelacakan, jika ada, untuk cabang saat ini.sumber
git checkout .
, yang bukan larangan.Saya menggunakan alias ini
kemudian
sumber
Berdasarkan jawaban Olivier Refalo
Ini menunjukkan hanya lokal dengan trek yang dikonfigurasi.
Tulis di skrip bernama git-track di jalur Anda dan Anda akan mendapatkan git-track perintah
Versi yang lebih rumit di https://github.com/albfan/git-showupstream
sumber
git config --get-regexp "branch\.$current_branch\.remote"
akan memberi Anda nama remote yang dilacak
git config --get-regexp "branch\.$current_branch\.merge"
akan memberi Anda nama cabang jarak jauh yang dilacak.
Anda harus mengganti $ current_branch dengan nama cabang Anda saat ini. Anda bisa mendapatkannya secara dinamis
git rev-parse --abbrev-ref HEAD
Skrip mini berikut menggabungkan hal-hal itu. Masukkan ke dalam file bernama
git-tracking
, buat itu bisa dieksekusi, dan pastikan itu ada di jalur Anda.maka Anda bisa mengatakannya
perhatikan bahwa nama cabang jarak jauh dapat berbeda dari nama cabang lokal Anda (walaupun biasanya tidak). Sebagai contoh:
seperti yang Anda lihat dalam kode, kunci untuk ini adalah mengekstraksi data dari konfigurasi git. Saya hanya menggunakan sed untuk menghapus data asing.
sumber
Ini yang rapi dan sederhana. Dapat memeriksa
git remote -v
, yang menunjukkan semua asal dan hulu dari cabang saat ini.sumber