Saya bermain dengan Git secara terpisah di komputer saya sendiri, dan saya merasa sulit untuk mempertahankan model mental dari semua cabang dan komitmen saya. Saya tahu saya dapat melakukan a git log
untuk melihat komit sejarah dari tempat saya berada, tetapi apakah ada cara untuk melihat seluruh topografi cabang, sesuatu seperti peta ASCII ini yang tampaknya digunakan di mana-mana untuk menjelaskan cabang?
.-A---M---N---O---P
/ / / / /
I B C D E
\ / / / /
`-------------'
Rasanya seperti seseorang datang dan mencoba mengambil repositori saya akan mengalami kesulitan untuk mengetahui persis apa yang sedang terjadi.
Saya kira saya dipengaruhi oleh browser aliran AccuRev ...
Jawaban:
Gunakan
git log --graph
ataugitk
. (Keduanya juga menerima--all
, yang akan menampilkan semua cabang bukan hanya yang saat ini.)Untuk nama cabang dan tampilan ringkas, coba:
sumber
--all
opsi dan juga label komit. Saya juga tidak pernah melihat di dropdown bahwa Anda dapat memilih semua cabang di sana.git log --graph --decorate --oneline
- menunjukkan satu komit per baris, dan menghiasi dengan nama cabang.--all
opsi. Cukup berguna!--simplify-by-decoration
opsi.Saya biasanya menggunakan
Dengan warna (jika shell Anda adalah Bash):
Ini akan mencetak representasi berbasis teks seperti ini:
(Anda hanya bisa menggunakan
git log --format=oneline
, tetapi itu akan mengikat pesan komit ke angka, yang terlihat kurang cantik IMHO).Untuk membuat pintasan untuk perintah ini, Anda mungkin ingin mengedit
~/.gitconfig
file Anda :Namun, seperti dicatat Sodel the Vociferous dalam komentar, perintah format panjang seperti itu sulit untuk dihafalkan. Biasanya, itu bukan masalah karena Anda dapat memasukkannya ke dalam
~/.gitconfig
file. Namun, jika Anda terkadang harus masuk ke mesin jarak jauh di mana Anda tidak dapat memodifikasi file konfigurasi, Anda bisa menggunakan versi yang lebih sederhana tetapi lebih cepat untuk mengetik:sumber
--full-history
hanya relevan ketika menggunakan--simplify-by-decoration
atau menentukan suatu filepath.Saya memiliki 3 alias (dan 4 alias-alias untuk penggunaan cepat) yang biasanya saya masukkan ke
~/.gitconfig
file saya :git lg
Sayagit lg1
terlihat seperti ini:git lg2
terlihat seperti ini:dan
git lg3
terlihat seperti ini:Perlu dicatat bahwa ini tidak dimaksudkan sebagai solusi menyeluruh — ini adalah template untuk Anda ubah, tambahkan, dan perbaiki sesuai dengan keinginan Anda. Jika Anda ingin menggunakan ini, rekomendasi saya adalah untuk:
.gitconfig
,.gitconfig
di masa mendatang (atau versi lain mengontrol dotfile Anda, tentu saja) .Catatan: Jawaban disalin dari dan ditingkatkan pada jawaban di stackoverflow.com/questions/1057564/pretty-git-branch-graphs karena jauh lebih sesuai di sini daripada di sana. Tinggalkan salinan pada pertanyaan lain karena alasan historis — sudah ditutup sekarang, dan jawabannya dirujuk oleh banyak jawaban lain.
sumber
%C(bold yellow)
dengan yang%C(auto)
memiliki warna berbeda untukHEAD
, cabang lokal dan jarak jauh ( ref ).%w()
; dengan cara ini Anda juga dapat dengan benar membungkus baris lebih lama atau melakukan banyak pesan komit tanpa mengganggu grafik.--abbrev-commit
ada di sana karena garis ke-2-ke-3 adalah indentasi tangan dengan spasi, dan saya ingin memastikan bahwa itu akan menggunakan SHA pendek - jadi lebih baik aman daripada menyesal.--decorate
ada juga di sana karena walaupun default Git melakukan hal yang sama, yang dapat dikonfigurasi secara berbeda atau berbeda dalam versi Git yang berbeda — untuk ini, saya benar-benar ingin dekorasi. Pada akhirnya, flag ekstra / redundan tidak buruk di sini— ini berupa file; itu bukan sesuatu yang Anda ketik sepanjang waktu.lg1
&lg2
tangkapan layar Anda dapat melihat(origin/test_on_10.8)
tampilan cabang jarak jauh, dan padalg2
tangkapan layar Anda dapat lihat(HEAD -> master, origin/master, origin/HEAD)
menunjukkan posisi lokal dan jarak jauh darimaster
cabang danHEAD
. Ini cocok dengan apa yang dilakukan alat GUI memvisualisasikan cabang populer untuk Git (gitk, SourceTree, TortoiseGit, Tower, Fork, GitX), meskipun dengan sedikit lebih banyak verbositas (beberapa alat GUI menggunakan kode warna) .Ke salah satu resep ini (berdasarkan log git atau gitk), Anda dapat menambahkan
--simplify-by-decoration
untuk meruntuhkan bagian linear yang tidak menarik dari sejarah. Ini membuat topologi lebih terlihat sekaligus. Sekarang saya dapat memahami sejarah besar yang tidak akan dapat dipahami tanpa opsi ini!Saya merasa perlu memposting ini karena sepertinya tidak sepopuler seharusnya. Itu tidak muncul di sebagian besar pertanyaan Stack Overflow tentang memvisualisasikan sejarah, dan saya butuh sedikit pencarian untuk menemukan - bahkan setelah saya tahu saya menginginkannya! Saya akhirnya menemukannya di laporan bug Debian ini . Penyebutan pertama tentang Stack Overflow tampaknya menjadi jawaban ini oleh Antoine Pelisse.
sumber
--simplify-by-decoration
memperjelas apa yang terjadi.git log --graph --all --simplify-by-decoration
berfungsi juga.--simplify-by-decoration
sambil menambahkan n komit sebelum / setelah setiap komit deokrasi (suka-B
dan-A
untukgrep
).Gitk
kadang menyakitkan bagi saya untuk membaca.Memotivasi saya untuk menulis GitVersionTree .
sumber
99,999% dari waktu saya melihat sejarah pada
git lg
dan 0,001% olehgit log
.Saya hanya ingin membagikan dua alias log yang mungkin berguna (konfigurasi dari .gitconfig):
git lg
akan melihat riwayat cabang saat ini.git hist
akan melihat seluruh sejarah cabang.sumber
Lihatlah Gitkraken - GUI lintas platform yang menunjukkan topologi dengan cara yang jelas.
Berikut ini adalah video tutorial singkat tentang beberapa fitur canggih.
sumber
Saya suka, dengan
git log
, melakukan:(juga dengan --all, untuk melihat cabang jarak jauh juga)
Bekerja dengan rilis Git terbaru: diperkenalkan sejak 1.6.3 ( Kamis, 7 Mei 2009 )
Anda juga dapat membatasi rentang tampilan log (jumlah komit):
(hanya tampilkan 5 komit terakhir)
Apa yang saya tidak suka tentang solusi yang dipilih saat ini adalah:
Ini ditampilkan terlalu banyak info (ketika saya hanya ingin melihat ringkasan cepat):
gitk
bagus, tetapi memaksa saya untuk meninggalkan sesi shell untuk jendela lain, sedangkan menampilkan n terakhir melakukan dengan cepat sering kali cukup.sumber
Gitg adalah alat yang hebat untuk Linux, mirip dengan Gitx untuk OS X. Jalankan saja 'gitg' pada baris perintah dari suatu tempat di dalam struktur pohon repositori Anda (sama dengan gitx).
sumber
gitg --all
, jika Anda ingin menghindari mucking di dalam menu drop down.Saya menemukan "git-big-picture" cukup berguna: https://github.com/esc/git-big-picture
Ini menciptakan grafik 2D yang cantik menggunakan dot / graphviz alih-alih tampilan linier, "satu dimensi" yang dihasilkan gitk dan teman. Dengan opsi -i, ini menunjukkan titik cabang dan menggabungkan komit tetapi mengabaikan semuanya di antaranya.
sumber
Alat berbasis web yang bagus adalah ungit . Ini berjalan pada platform apa pun yang didukung node.js & git. Ada video tentang cara kerjanya bagi mereka yang menemukan hal-hal semacam itu lebih mudah daripada membaca ...
sumber
Lihatlah BranchMaster .
Saya menulisnya untuk memvisualisasikan struktur cabang yang kompleks, dengan memangkas semua komit di antara mereka menjadi satu baris. Angka-angka menunjukkan jumlah komit.
sumber
Tidak ada yang disebutkan
tig
? Itu tidak melipat cabang seperti "BranchMaster", tetapi ...Cepat, berjalan di terminal.
Karena sangat cepat (kontrol keyboard) Anda mendapatkan UX yang hebat, hampir seperti "
ls
" saya untuk direktori yang berisi repositori git.https://jonas.github.io/tig/
Ini memiliki cara pintas yang biasa,
/
untuk mencari, dll.(ps. itu adalah terminal di latar belakang tangkapan layar ini, terlihat lebih baik saat ini, tetapi komputer saya menolak untuk mengambil tangkapan layar, maaf)
(pps. Saya juga menggunakan gitkraken dan memiliki visualisasi yang sangat jelas, tetapi jauh lebih berat daripada
tig
)sumber
Tortoise Git memiliki alat yang disebut "Grafik Revisi". Jika Anda menggunakan Windows, semudah klik kanan pada repo Anda -> Tortoise Git -> Revision Graph.
sumber
Terkikik-kikik menarik grafik yang sangat bagus.
sumber
Saya menggunakan alias berikut ini.
Ini memiliki lebih banyak info dalam skema warna daripada alias yang saya lihat di atas. Tampaknya juga cukup umum, sehingga Anda mungkin memiliki kemungkinan itu ada di lingkungan orang lain atau bisa menyebutkannya dalam percakapan tanpa harus menjelaskannya.
Dengan tangkapan layar dan deskripsi lengkap di sini: http://blog.kfish.org/2010/04/git-lola.html
sumber
Untuk pengguna Mac, checkout (tanpa maksud kata-kata) alat gratis, sumber terbuka GitUp: http://gitup.co/
Saya suka cara grafik ditampilkan, lebih jelas daripada beberapa alat lain yang pernah saya lihat.
Proyeknya ada di sini: https://github.com/git-up/GitUp
sumber
Saya memiliki
git log
alias ini~/.gitconfig
untuk melihat riwayat grafik:Dengan alias di tempat,
git l
akan muncul sesuatu seperti ini:Di Git 2.12 + Anda bahkan dapat menyesuaikan warna garis grafik menggunakan
log.graphColors
opsi konfigurasi.Adapun format log, mirip dengan
--oneline
, dengan penambahan nama penulis (menghormati.mailmap
) dan tanggal relatif penulis . Perhatikan bahwa%C(auto)
sintaks, yang memberi tahu Git untuk menggunakan warna default untuk komit hash, dll. Didukung di Git> = 1.8.3 .sumber
Saya menemukan posting blog ini yang menunjukkan cara ringkas:
Saya biasanya membuat alias untuk perintah di atas:
dan cukup gunakan saja
gl
.Anda juga dapat menambahkan alias ke konfigurasi git. Buka
~/.gitconfig
dan tambahkan baris berikut ke [alias]dan gunakan seperti ini:
git lg
sumber
Alias favorit pribadi saya, melalui .gitconfig, adalah:
sumber
Bagi mereka yang menggunakan editor teks VSCode , pertimbangkan Ekstensi Riwayat Git oleh D. Jayamanne:
sumber
Gitx juga merupakan alat visualisasi yang fantastis jika Anda menggunakan OS X.
sumber
Perintah git log lainnya. Yang ini dengan kolom lebar tetap :
sumber
Lihat
SmartGit
. Ini sangat mengingatkan saya pada visualisasi cabang TortoiseHg dan gratis untuk penggunaan non-komersial.sumber
Di Windows ada alat yang sangat berguna yang dapat Anda gunakan: ekstensi git. Ini adalah alat gui dan membuat operasi git sangat mudah.
Ini juga bersumber terbuka.
http://gitextensions.github.io
sumber
Saya sudah mencoba
--simplify-by-decoration
tetapi semua gabungan saya tidak ditampilkan. Jadi saya malah hanya memotong garis tanpa simbol "\" dan "/" di header, sambil selalu menjaga garis dengan "(" menunjukkan cabang segera setelah itu. Ketika menunjukkan sejarah cabang saya secara umum tidak tertarik dalam komentar komit, jadi Saya menghapusnya juga, saya berakhir dengan alias shell berikut.sumber
Bisakah kita membuatnya lebih rumit?
Bagaimana dengan git log --all --decorate --oneline --graph (ingat A Dog = --All --Decorate --Oneline --Graph)
sumber
Situs resmi Git meminta beberapa alat GUI khusus platform pihak ketiga. Tekan di sini git GUI Tools untuk Platform Linux
Saya telah menggunakan
gitg
danGitKraken
untuk platform linux. Keduanya bagus untuk memahami pohon komitsumber