Saya ingin mendapatkan daftar semua cabang di repositori Git dengan cabang "paling segar" di atas, di mana cabang "paling segar" adalah yang telah berkomitmen untuk yang terbaru (dan, karenanya, lebih cenderung menjadi satu Saya ingin memperhatikan).
Apakah ada cara saya bisa menggunakan Git untuk (a) mengurutkan daftar cabang berdasarkan komit terbaru, atau (b) mendapatkan daftar cabang bersama dengan tanggal komit terakhir masing-masing, dalam beberapa jenis format yang dapat dibaca mesin?
Kasus terburuk, saya selalu bisa menjalankan git branch
untuk mendapatkan daftar semua cabang, parsing hasilnya, dan kemudian git log -n 1 branchname --format=format:%ci
untuk masing-masing, untuk mendapatkan tanggal komit masing-masing cabang. Tetapi ini akan berjalan pada kotak Windows, di mana memintal proses baru relatif mahal, jadi meluncurkan Git yang dapat dieksekusi sekali per cabang bisa menjadi lambat jika ada banyak cabang. Apakah ada cara untuk melakukan semua ini dengan satu perintah?
sumber
git for-each-ref
dari Jakub Narębski: Anda bisa mendapatkan cabang jauh yang lewatrefs/remotes/
alih-alihrefs/heads/
(atau Anda bisa melewati keduanya, dipisahkan spasi-putih);refs/tags/
untuk tag, atau hanyarefs/
untuk ketiga jenis.for-each-ref
! Anda akan langsung menggunakangit branch --sort=-committerdate
: lihat jawaban saya di bawah iniJawaban:
Gunakan
--sort=-committerdate
opsigit for-each-ref
;Juga tersedia sejak Git 2.7.0 untuk
git branch
:Penggunaan Dasar:
Hasil:
Penggunaan Lanjutan:
Hasil:
sumber
--format=%(refname)
.git for-each-ref --sort=-committerdate refs/heads/ --format='%(refname) %(committerdate) %(authorname)' | sed 's/refs\/heads\///g'
:shortname
?git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/
. git-untuk-masing-masing ref (1) manpage mengatakan: Untuk nama pendek yang tidak ambigu dari append:short
.[alias]
bagian ini dan saya menyukainya.br = for-each-ref --sort=committerdate refs/heads/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'
Daftar nama cabang Git, dipesan oleh komit terbaru ...
Memperluas pada jawaban Jakub dan tip Joe , berikut ini akan menghapus "referensi / kepala /" sehingga output hanya menampilkan nama cabang:
Perintah:
Hasil:
sumber
--format=%(refname:short)
alih-alih mengandalkancut
.git rb
ingat untuk mengelilingi perintah dalam tanda kutip:git config --global alias.rb "for-each-ref --count=20 --sort=-committerdate refs/heads/ --format=\'%(refname:short)\'"
git branch
, jadi mendapatkan cabang lokal, jarak jauh atau semua berfungsi seperti pada git-branch (yaitu -r, -a).git branch -r --sort=committerdate --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'
Berikut kode optimal, yang menggabungkan dua jawaban lainnya:
sumber
git for-each-ref --sort=-committerdate refs/heads/ --format='%(committerdate:short) %(authorname) %(refname:short)'
Berikut adalah perintah sederhana yang mencantumkan semua cabang dengan komit terbaru:
Untuk memesan dengan komit terbaru, gunakan
Sumber: http://git-scm.com/book/en/Git-Branching-Branch-Management
sumber
git branch -av
jika Anda ingin melihat cabang non-lokal juga.git branch -v
memasukkan tanggal setiap komit yang terdaftar?git branch -va --sort=-committerdate
menunjukkan cabang non-lokal, dengan cabang yang paling baru diubah di atas.Saya menggunakan alias berikut:
recent = "!r(){git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)'|column -ts'|'}; r"
yang menghasilkan:
Gunakan '|' untuk memisahkan.
sumber
column -ts'|'
dan pipa karakter jika tanda koma dapat terjadi di dalam cap waktu relatif di lokal Anda.'%(HEAD) ...'
di awal string format untuk mendapatkan efek yang sama tanpa mem-pipkansed
perintah[alias] recent = !git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)'|column -ts'|'
git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)' --color=always|column -ts'|'}
Saya dapat merujuk contoh-contoh sebelumnya untuk menciptakan sesuatu yang paling cocok untuk saya.
sumber
git for-each-ref --sort=-committerdate refs/heads/ refs/remotes --format='%(authordate:short) %(authorname) %(color:red)%(objectname:short) %(color:yellow)%(refname:short)%(color:reset) (%(color:green)%(committerdate:relative)%(color:reset))'
Saya juga membutuhkan warna, tag, dan referensi jarak jauh tanpa duplikat:
Karena mengutip bisa sulit, inilah alias untuk Bash:
sumber
| head -n20
di akhir. Jika Anda menggunakan alias, pastikan ini sesuai dengan tanda kutip.Jawaban lain sepertinya tidak memungkinkan lewat
-vv
untuk mendapatkan output verbose.Jadi, ini adalah satu-liner yang mengurutkan
git branch -vv
berdasarkan tanggal komit, menjaga warna dll:Jika Anda juga ingin mencetak tanggal komit, Anda dapat menggunakan versi ini sebagai gantinya:
Output sampel:
Ini mungkin lebih mudah dibaca menjadi beberapa baris:
Ini juga harus bekerja dengan argumen lain
git branch
, misalnya-vvr
untuk membuat daftar cabang pelacakan jarak jauh, atau-vva
untuk mendaftar cabang pelacakan jarak jauh dan lokal.sumber
-vv
memang bisa bermanfaat, terima kasih. Namun, solusi ini masih memunculkan proses baru untuk setiap cabang, yang ingin dihindari OP.git branch
tidak secara spesifik mendefinisikan arti-vv
, tetapi hanya dari-v
, jadi-vv
harus memiliki yang sama-v
.-v, -vv, --verbose
berisi yang berikut:If given twice, print the name of the upstream branch, as well
git 2.7 (Q4 2015) akan memperkenalkan pemilahan cabang menggunakan secara langsung
git branch
:Lihat commit aa3bc55 , commit aedcb7d , commit 1511b22 , commit f65f139 , ... (23 Sep 2015), commit aedcb7d , commit 1511b22 , commit ca41799 (24 Sep 2015), dan commit f65f139 , ... (23 Sep 2015) oleh Karthik Nayak (
KarthikNayak
) .(Digabung oleh Junio C Hamano -
gitster
- dalam komit 7f11b48 , 15 Okt 2015)Secara khusus, lakukan aedcb7d :
Buatlah '
branch.c
' gunakan 'ref-filter
' API untuk iterasi melalui penyortiran referensi. Ini menghapus sebagian besar kode yang digunakan di 'branch.c
' menggantikannya dengan panggilan keref-filter
perpustakaan ' '.Itu menambahkan opsi
--sort=<key>
:Sini:
Atau (lihat di bawah dengan Git 2.19)
Lihat juga komit 9e46833 (30 Okt 2015) oleh Karthik Nayak (
KarthikNayak
) .Dibantu-oleh: Junio C Hamano (
gitster
) .(Digabung oleh Junio C Hamano -
gitster
- dalam komit 415095f , 03 Nov 2015)Dengan Git 2.19, urutan pengurutan dapat diatur secara default.
git branch
mendukung konfigurasibranch.sort
, sepertigit tag
, yang sudah memiliki konfigurasitag.sort
.Lihat commit 560ae1c (16 Agustus 2018) oleh Samuel Maftoul (``) .
(Digabung oleh Junio C Hamano -
gitster
- di commit d89db6f , 27 Agu 2018)Untuk membuat daftar cabang jarak jauh, gunakan
git branch -r --sort=objectsize
. The-r
flag menyebabkan untuk daftar cabang terpencil bukan cabang lokal.Dengan Git 2.27 (Q2 2020), varian "
git branch
" dan "for-each-ref
" lainnya menerima banyak--sort=<key>
opsi dalam urutan prioritas yang lebih tinggi, tetapi ada beberapa kerusakan di sekitar "--ignore-case
penanganan ", dan pemecahan ikatan dengan refname, yang telah diperbaiki.Lihat komit 7c5045f , komit 76f9e56 (03 Mei 2020) oleh Jeff King (
peff
) .(Digabung oleh Junio C Hamano -
gitster
- dalam komit 6de1630 , 08 Mei 2020)sumber
-r
Saya suka menggunakan tanggal relatif dan memperpendek nama cabang seperti ini:
Yang memberi Anda output:
Saya sarankan membuat file Bash untuk menambahkan semua alias favorit Anda dan kemudian membagikan skrip ke tim Anda. Berikut ini contoh untuk menambahkan yang ini:
Kemudian Anda bisa melakukan ini untuk mendapatkan daftar cabang lokal yang diformat dan diurutkan dengan baik:
Perbarui: Lakukan ini jika Anda ingin mewarnai:
sumber
fatal: unknown field name: '-authordate:iso8601'
refs/heads
denganrefs/remotes
untuk melihat cabang jarak jauh.expansion of alias 'branches' failed; 'echo' is not a git command
(echo ' ------------------------------------------------------------' && git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:relative)%09%(refname:short)' refs/heads && echo ' ------------------------------------------------------------') | grep --color -E "$(git rev-parse --abbrev-ref HEAD)$|$"
Pada Git 2.19, Anda cukup:
Anda juga bisa:
Jadi, setiap kali Anda mendaftar cabang di repositori saat ini, itu akan terdaftar diurutkan berdasarkan committerdate.
Jika setiap kali Anda daftar cabang, Anda ingin mereka diurutkan berdasarkan tanggal comitter:
Penafian: Saya penulis fitur ini di Git, dan saya menerapkannya ketika saya melihat pertanyaan ini.
sumber
Menambahkan beberapa warna (karena
pretty-format
tidak tersedia)sumber
Saya memiliki masalah yang sama, jadi saya menulis permata Ruby yang disebut Twig . Ini mencantumkan cabang dalam urutan kronologis (terbaru terlebih dahulu), dan juga dapat membiarkan Anda mengatur usia maksimal sehingga Anda tidak mencantumkan semua cabang (jika Anda memiliki banyak cabang). Sebagai contoh:
Ini juga memungkinkan Anda menyimpan properti khusus untuk setiap cabang, misalnya, id tiket, status, todos, dan memfilter daftar cabang sesuai dengan properti ini. Info lebih lanjut: http://rondevera.github.io/twig/
sumber
Saya datang dengan perintah berikut (untuk Git 2.13 dan yang lebih baru):
Jika tidak memiliki,
column
Anda dapat mengganti baris terakhir denganOutputnya seperti
Saya menulis posting blog tentang bagaimana berbagai karya.
sumber
git branch --sort
saya sebutkan di stackoverflow.com/a/33163401/6309 .FYI, jika Anda ingin mendapatkan daftar cabang yang baru saja diperiksa (bukan yang baru-baru ini dilakukan), Anda dapat menggunakan reflog Git:
Lihat juga: Bagaimana saya bisa mendapatkan daftar cabang Git yang baru-baru ini saya periksa?
sumber
Berikut ini adalah skrip kecil yang saya gunakan untuk beralih di antara cabang-cabang terbaru:
Menggunakan dua alias itu:
Sebut saja dalam repositori Git, dan itu akan menunjukkan kepada Anda cabang N terakhir (10 secara default) dan nomor masing-masing. Masukkan nomor cabang, dan periksa:
sumber
Biasanya kami mempertimbangkan cabang terpencil baru-baru ini. Jadi coba ini
sumber
Berikut ini adalah skrip lain yang melakukan semua skrip lainnya. Bahkan, ia menyediakan fungsi untuk shell Anda.
Kontribusinya adalah ia menarik beberapa warna dari konfigurasi Git Anda (atau menggunakan default).
sumber
Ini didasarkan pada versi saeedgnu , tetapi dengan cabang saat ini ditampilkan dengan bintang dan warna, dan hanya menunjukkan apa pun yang tidak digambarkan sebagai "bulan" atau "tahun" yang lalu:
sumber
Hasil terbaik saya sebagai skrip:
sumber
git branch --sort=-committerdate | head -5
Untuk siapa pun yang tertarik untuk mendapatkan hanya 5 nama cabang teratas yang diurutkan berdasarkan tanggal committer.
sumber
Baris-perintah yang diterima menjawab , tetapi jika Anda menginginkan sesuatu yang lebih cantik, seperti GUI, dan asal Anda === "github".
Anda bisa mengklik "Cabang" di repositori. Atau tekan URL secara langsung: https://github.com/ORGANIZATION_NAME/REPO_NAME/branches
sumber
Berikut variasi yang saya cari:
Itu
tail -r
membalik daftar sehingga yang terbarucommiterdate
adalah yang terakhir.sumber
tail
memiliki-r
?Saya menyalurkan output dari jawaban yang diterima ke
dialog
, untuk memberi saya daftar interaktif:Simpan sebagai (misalnya)
~/bin/git_recent_branches.sh
danchmod +x
itu. Lalugit config --global alias.rb '!git_recent_branches.sh'
beri akugit rb
perintah baru .sumber
Saya tahu sudah ada banyak jawaban, tetapi inilah dua sen saya untuk alias sederhana (saya suka memiliki cabang terbaru saya di bagian bawah):
Ini akan memberi Anda gambaran bagus tentang 15 cabang terbaru Anda, berwarna, dengan cabang Anda saat ini disorot (dan memiliki tanda bintang).
sumber
Mengalami kesulitan menangani tanda kutip tunggal pada Mac di bash_profile ketika mencoba mengatur alias. Jawaban ini membantu mengatasinya " Bagaimana cara melepaskan tanda kutip tunggal dalam string yang dikutip tunggal
Solusi kerja:
PS Tidak dapat berkomentar karena reputasi saya
sumber
git for-each-ref --sort=committerdate refs/heads/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'
ini yang kamu butuhkansumber
Git v2.19 memperkenalkan
branch.sort
opsi konfigurasi (lihat branch.sort ).Jadi
git branch
akan mengurutkan berdasarkan tanggal committer (desc) secara default dengannaskah:
Memperbarui:
Begitu,
dan
sumber