31 Pertanyaan: Grafik cabang git cantik

pertanyaan dibuat di Tue, Sep 18, 2018 12:00 AM

Saya telah melihat beberapa buku dan artikel memiliki grafik git dan komitmen yang sangat cantik. Bagaimana saya bisa membuat gambar git history yang dapat dicetak berkualitas tinggi?

    
1193
  1. Saya telah membuat skrip python untuk membuat grafik graphiz! Lihatlah. github.com/chode/git-graph
    2014-09-14 08: 13: 56Z
  2. Jika Anda ingin yang berkualitas tinggi dan dapat dicetak, alat saya ( bit-booster.com/graph.html ) mengubah" git log "menjadi SVG. Untuk informasi lebih lanjut, lihat jawaban saya .
    2016-10-13 18: 44: 03Z
  3. Apakah Anda mencari alat untuk memvisualisasikan riwayat git Anda sendiri - atau - alat pembuatan bagan yang memiliki cara untuk menggambar "cabang Git" yang cantik?
    2016-12-18 17: 03: 05Z
  4. 2017-01-30 11: 48: 20Z
  5. Saya akan menghapus tag diarahkan-asiklik-grafik karena tidak relevan dengan pertanyaan ini
    2017-07-07 20: 24: 23Z
30 Jawaban                              30                         

Pembaruan: Jawaban ini jauh lebih menarik daripada yang seharusnya. Itu awalnya diposting karena saya pikir grafik terlihat bagus dan mereka dapat ditarik di Illustrator untuk publikasi - dan tidak ada solusi yang lebih baik. Tetapi sekarang ada jawaban yang jauh lebih berlaku untuk Q ini, seperti fracz ' s, Jubobs , atau Harry Lee ! Silakan pilih mereka !!

Pembaruan 2: Saya telah mengirimkan versi yang lebih baik dari jawaban ini ke Memvisualisasikan topologi cabang di git pertanyaan, karena jauh lebih tepat di sana. Versi itu mencakup lg3 , yang menampilkan info pembuat dan pengangkut, jadi Anda harus memeriksanya. Meninggalkan jawaban ini karena alasan historis (& rep, saya akui), meskipun saya sangat tergoda untuk menghapusnya saja.

2 ¢ : Saya memiliki dua alias yang biasanya saya masukkan dalam file ~/.gitconfig saya:

 
[alias]
lg1 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all
lg = !"git lg1"

git lg/git lg1 terlihat seperti ini:
git lg1

dan git lg2 terlihat seperti ini:
git lg2

    
1695
2017-05-23 12: 18: 30Z
  1. Ya, saya lakukan. Warna normal dan cerah /tebal adalah: Hitam #202020/#555555, Merah: #5d1a14/#da4939, Hijau: #424e24/#a5c261, Kuning: #6f5028/#ffc66d, Biru: #263e4e/#6d9cbe, Magenta: #3e1f50/#a256c7, Cyan: #234e3f/#62c1a1, dan Putih: #979797/#ffffff.
    2012-03-21 04: 12: 08Z
  2. @ Turbo: Bagi saya, warnanya dapat diubah dalam pengaturan profil untuk aplikasi terminal saya (Terminal.app). Aplikasi terminal yang Anda gunakan mungkin atau mungkin tidak mendukung perubahan warna mana yang ditampilkan untuk warna ANSI yang diberikan. Juga, tanda hubung (em tanda hubung, akurat) telah dibuat dengan option-shift- [hypkunci hen-minus]. Saya kira saya salah berasumsi bahwa semua platform saat ini tidak sesuai dengan Unicode.
    2013-05-05 23: 43: 36Z
  3. --date=relative dan --abbrev-commit Anda berlebihan karena Anda masing-masing secara eksplisit menggunakan %cr dan %h.
    2013-06-07 21: 10: 20Z
  4. Saya akan menambahkan modifier %C(auto) ke refnames (%d) untuk mendapatkan warna yang lebih bagus. Lihat stackoverflow.com/questions/5889878/color-in -git-log /...
    2016-02-10 10: 55: 04Z
  5. Jawaban yang bagus. Saya telah memodifikasi perintah agar lebih mirip dengan keluaran --oneline --decorate dengan lg = log --graph --abbrev-commit --decorate --format=format:'%C(yellow)%h%C(reset)%C(auto)%d%C(reset) %C(normal)%s%C(reset) %C(dim white)%an%C(reset) %C(dim blue)(%ar)%C (reset)' --all
    2016-02-24 23: 02: 51Z

Banyak jawaban di sini bagus, tetapi bagi mereka yang hanya ingin satu baris jawaban langsung tanpa harus menyiapkan alias atau tambahan apa pun, ini dia:

 
git log --all --decorate --oneline --graph

Tidak semua orang akan melakukan git log setiap saat, tetapi ketika Anda membutuhkannya, ingat saja:

  

" Seekor Anjing " = log git - a ll - d ecorate - o neline - g raph

 masukkan deskripsi gambar di sini

    
901
2018-11-07 10: 15: 48Z
  1. git config --global alias.adog "log --all --decorate --oneline --graph"
    2017-02-09 22: 37: 15Z
  2. Saya sudah lama mencari --all, saya hampir menangis (T_T) TERIMA KASIH!
    2018-09-21 16: 44: 53Z
  3. Ringkasan untuk opsi-opsi yang berbeda: --all = Berpura-pura seolah-olah semua ref di ref /terdaftar di baris perintah sebagai commit &gt ;. --tidak ada hiasi, --decorate [= pendek | penuh | tidak] = Cetak nama-nama referensi dari setiap komit yang ditampilkan. Jika pendek ditentukan, awalan nama ref ref /head /, ref /tag /dan ref /remote /tidak akan dicetak. Jika lengkap ditentukan, nama ref lengkap (termasuk awalan) akan dicetak. --oneline = Ini adalah singkatan untuk "--pretty = oneline --abbrev-commit" yang digunakan bersama. --graph = Gambar representasi grafis berbasis teks dari komit sejarah
    2018-11-09 08: 45: 48Z
  4. - oneline diperkenalkan di Git 1.6.3: github.com/git/git/blob/… --pretty = oneline akan bekerja dengan versi Git sebelum 1.6.3
    2018-11-12 17: 58: 03Z
  5. jawaban terbaik di SO. Terima kasih telah menjaganya tetap ringan.
    2019-02-13 12: 48: 48Z

Untuk output teks Anda dapat mencoba:

 
git log --graph --abbrev-commit --decorate --date=relative --all

atau:

 
git log --graph --oneline --decorate --all

atau: inilah  alias graphviz untuk menggambar grafik DAG.

Saya pribadi menggunakan gitx , gitk --all dan gitnub .

    
315
2016-12-03 00: 48: 16Z
  1. saya akan menambahkan --abbrev-commit --decorate, dan kemudian perfect!
    2011-10-07 16: 14: 20Z
  2. - singkatan-komit disiratkan oleh --oneline, bukan?
    2012-04-10 09: 55: 40Z
  3. @ dwineman ya Anda tidak perlu --abbrev-commit jika Anda menggunakan --oneline
    2012-09-04 11: 54: 32Z
  4. Tampaknya di baris kedua git log --graph --oneline --decorate --date=relative --all Anda, argumen --date tidak berguna. Saya tidak dapat melihat tanggal yang ditampilkan di log.
    2016-02-20 06: 21: 50Z
  5. tanggal tidak ditampilkan ketika --oneline ditentukan
    2016-03-07 08: 51: 06Z

Gitgraph.js memungkinkan untuk menggambar cabang-cabang cantik git tanpa repositori. Cukup tulis kode Javascript yang mengonfigurasi cabang Anda dan melakukan dan merendernya di browser.

 
var gitGraph = new GitGraph({
   template: "blackarrow",
   mode: "compact",
   orientation: "horizontal",
   reverseArrow: true
});

var master = gitGraph.branch("master").commit().commit();
var develop = gitGraph.branch("develop").commit();
master.commit();
develop.commit().commit();
develop.merge(master);

grafik sampel yang dihasilkan dengan Gitgraph.js

atau dengan metro templat:

Tema metro GitGraph.js

atau dengan pesan, penulis, dan tag komit:

GitGraph dengan pesan komit

Uji dengan JSFiddle .

Hasilkan dengan Git Grapher oleh @bsara.

    
215
2019-05-01 21: 32: 23Z
  1. Yay, itu benar-benar luar biasa! Diposting di biola jsfiddle.net/guan1oz1 sehingga Anda dapat segera mengujinya.
    2014-11-05 00: 46: 21Z
  2. Panah harus mengarah ke orang tua, bukan ke anak-anak.
    2015-02-04 19: 45: 04Z
  3. @ Jubobs: Poin bagus. Itu adalah rintangan umum bagi orang yang mencoba memahami Git: mereka memikirkan urutan waktu alih-alih warisan. Menjelaskan bahwa (hampir) semua yang ada di git relatif terhadap sesuatu sebelum membantu semua bagian lainnya masuk ke tempatnya.
    2015-03-02 23: 09: 10Z
  4. Mengenai arah panah, dari dokumen: * @param {Boolean} [options.reverseArrow = false] - Buat panah mengarah ke leluhur jika benar
    2016-04-14 15: 32: 07Z
  5. FYI, setelah melihat posting ini dan bermain dengan gitgraph.js, saya memutuskan untuk membuat alat kecil yang pada dasarnya menempatkan UI ke gitgraph.js. Ini belum selesai, dan UI belum berada di tempat yang saya inginkan, tetapi kontribusi dipersilahkan! lihat: github.com/bsara/git-grapher
    2016-05-16 20: 53: 52Z

Dibangun di atas TikZ & PGF , gitdags adalah paket LaTeX kecil yang memungkinkan Anda untuk dengan mudah menghasilkan grafik komit vektor-grafik , dan lainnya.

Pembuatan otomatis grafik komit repositori yang ada adalah tidak tujuan gitdags >; grafik yang dihasilkannya hanya dimaksudkan untuk tujuan pendidikan .

Saya sering menggunakannya untuk menghasilkan grafik untuk jawaban saya atas pertanyaan Git, sebagai alternatif untuk grafik komit ASCII:

Berikut ini adalah contoh grafik yang menunjukkan efek rebase sederhana:

masukkan deskripsi gambar di sini

 
\documentclass{article}

\usepackage{subcaption}
\usepackage{gitdags}

\begin{document}

\begin{figure}
  \begin{subfigure}[b]{\textwidth}
    \centering
    \begin{tikzpicture}
      % Commit DAG
      \gitDAG[grow right sep = 2em]{
        A -- B -- { 
          C,
          D -- E,
        }
      };
      % Tag reference
      \gittag
        [v0p1]       % node name
        {v0.1}       % node text
        {above=of A} % node placement
        {A}          % target
      % Remote branch
      \gitremotebranch
        [origmaster]    % node name
        {origin/master} % node text
        {above=of C}    % node placement
        {C}             % target
      % Branch
      \gitbranch
        {master}     % node name and text 
        {above=of E} % node placement
        {E}          % target
      % HEAD reference
      \gitHEAD
        {above=of master} % node placement
        {master}          % target
    \end{tikzpicture}
    \subcaption{Before\ldots}
  \end{subfigure}

  \begin{subfigure}[b]{\textwidth}
    \centering
    \begin{tikzpicture}
      \gitDAG[grow right sep = 2em]{
        A -- B -- { 
          C -- D' -- E',
          {[nodes=unreachable] D -- E },
        }
      };
      % Tag reference
      \gittag
        [v0p1]       % node name
        {v0.1}       % node text
        {above=of A} % node placement
        {A}          % target
      % Remote branch
      \gitremotebranch
        [origmaster]    % node name
        {origin/master} % node text
        {above=of C}    % node placement
        {C}             % target
      % Branch
      \gitbranch
        {master}      % node name and text 
        {above=of E'} % node placement
        {E'}          % target
      % HEAD reference
      \gitHEAD
        {above=of master} % node placement
        {master}          % target
    \end{tikzpicture}
    \subcaption{\ldots{} and after \texttt{git rebase origin/master}}
  \end{subfigure}
  \caption{Demonstrating a typical \texttt{rebase}}
\end{figure}

\end{document}
    
110
2017-05-23 12: 02: 56Z
  1. @ Itu terlihat hebat! Saya juga ingin beberapa baris tentang cara menggunakannya: pertimbangkan pengguna Windows yang tidak menginstal LaTeX sama sekali. Bagaimana cara menghasilkan grafik dari awal?
    2014-08-28 13: 29: 57Z
  2. @ VonC Saya tidak yakin, tetapi jika Anda tidak ingin menginstal LaTeX, Anda mungkin dapat menghasilkan grafik Anda di ShareLatex dan WriteLaTeX , dan suka. Saya akan memeriksanya dan memperluas wiki ketika saya memiliki lebih banyak waktu ... Jangan ragu untuk mempromosikan paket :)
    2014-08-28 13: 34: 35Z
  3. Ini bagus sekali! Saya akan menulis tutorial di beberapa titik, tetapi untuk sekarang, saya hanya ingin menyebutkan bahwa Anda dapat memposting proses grafik Anda menggunakan documentclass standalone (saya menggunakan fitur krop), menggunakan latex input.tex untuk menghasilkan dvi, dan akhirnya gunakan dvisvgm input.dvi untuk menghasilkan SVG dengan transparansi. Konversi dari SVG ke format raster seperti PNG cukup mudah dengan convert -antialias -density 300 -background none input.svg output.png. Omong-omong, gambar-gambar ini terlihat luar biasa dengan transparansi penuh. Masih mengerjakan masalah font ... i.imgur.com/1Xu2Ry5.png
    2015-02-04 00: 31: 23Z
  4. Butuh beberapa saat untuk menyelesaikannya, jadi saya menulis panduan langkah demi langkah cara dapatkan gitdags bekerja dari awal di Ubuntu 14.04
    2015-02-09 10: 38: 29Z
  5. @ AndreaPolci Lihat github.com/Jubobs /gitdags /issues /3 untuk contoh penggabungan. Dokumentasi untuk gitdags sedang dalam perjalanan!
    2015-04-01 21: 58: 05Z

Gitg adalah klon dari Gitk dan GitX untuk GNOME (ini juga berfungsi di KDE dll .) yang menampilkan grafik berwarna cantik.

Ini dikembangkan secara aktif (mulai 2012). Ini memungkinkan Anda mengurutkan komit (grafik graph) baik secara kronologis atau secara topologis , dan menyembunyikan komit yang tidak t mengarah ke cabang yang dipilih.

Ini berfungsi dengan baik dengan repositori besar dan grafik ketergantungan kompleks.

Contoh tangkapan layar, menampilkan repositori linux-git dan linux-2.6:

 linux-git

linux-2.6

    
73
2015-08-18 16: 48: 31Z

SourceTree benar-benar bagus. Itu memang mencetak sejarah ukuran sedang dan grafik cabang dan tampan: (berikut ini dilakukan pada proyek Git eksperimental hanya untuk melihat beberapa cabang). Mendukung Windows 7+ dan Mac OS X 10.6+.

masukkan deskripsi gambar di sini

http://www.sourcetreeapp.com/

    
57
2013-05-21 18: 24: 56Z
  1. Itu juga tersedia di App Store, jadi pembaruan harus bekerja secara otomatis.
    2013-12-08 07: 02: 50Z
  2. Saya suka grafik sourcetree, tapi saya lebih suka menggunakan baris perintah, dan default sourcetree selalu mengacaukan repo saya.
    2014-03-14 23: 51: 46Z
  3. SourceTree akan bersikeras Anda membuat akun Atlassian (atau menggunakan akun google Anda dan memberikan Atlassian beberapa izin untuk mendapatkan email dan info profil), dan setelah menginstal pada Mac (OS X El Capitan v 10.11.5) gagal pada langkah 'Mengkloning': "fatal: tidak ada pemetaan submodule ditemukan di .gitmodules untuk path '< path dilewati >'" dan juga peringatan aneh: "templat tidak ditemukan /usr /local /git /share /git-core /templates ". Pesan yang sangat tidak jelas, tidak terlalu bagus.
    2016-11-23 16: 05: 19Z
  4. Dan kemudian setelah uninstall jangan lupa untuk merapikan hak istimewa keamanan Google Anda yang Anda berikan sebelumnya: myaccount.google.com/security - > Aplikasi yang terhubung & situs - > Aplikasi yang terhubung ke akun Anda - > Kelola Aplikasi
    2016-11-23 16: 21: 48Z

Saya baru saja menulis satu alat yang dapat menghasilkan grafik komit git cantik menggunakan HTML /Kanvas.

Dan sediakan plugin jQuery yang membuatnya mudah digunakan.

[github] https://github.com/tclh123/commits-graph

Pratinjau:

preview

    
56
2014-01-14 15: 34: 58Z
  1. Terlihat bagus, bagaimana Anda mendapatkan data yang sudah diformat untuk menggambar grafik ini?
    2014-01-27 17: 19: 27Z
  2. @ Olga Saya baru saja menambahkan kode backend ke repo saya. Anda dapat melihat itu di github.
    2014-01-29 14: 20: 49Z

git-forest adalah skrip perl yang sangat baik yang pernah saya kunjungi menggunakan lebih dari satu tahun dan saya hampir tidak menggunakan perintah git log secara langsung lagi.

Ini adalah beberapa hal yang saya sukai dari skrip ini:

  • Menggunakan karakter unicode untuk menggambar garis-garis pada grafik sehingga memberikan tampilan yang lebih berkesinambungan ke garis-garis grafik.
  • Anda dapat menggabungkan --reverse dengan output grafik, yang tidak mungkin dengan perintah git log biasa.
  • Menggunakan git log secara internal untuk mengambil daftar commit, sehingga semua opsi yang Anda berikan ke git log juga dapat diteruskan ke skrip ini juga.

Saya memiliki alias menggunakan git-forest sebagai berikut:

 
[alias]
tree = "forest --pretty=format:\"%C(red)%h %C(magenta)(%ar) %C(blue)%an %C(reset)%s\" --style=15 --reverse"

Ini adalah bagaimana output terlihat pada aterminal:

 masukkan deskripsi gambar di sini

    
53
2015-08-18 16: 45: 52Z
  1. Tidak berfungsi di msysgit
    2014-06-04 16: 38: 17Z
  2. @ void.pointer - Ya itu tidak akan terjadi karena git-forest adalah skrip perl dan memiliki dependensi modul perl. Menjalankan git di bawah cygwin dengan modul perl yang diperlukan terpasang mungkin merupakan alternatif terbaik yang bisa Anda dapatkan jika Anda benar-benar menginginkan ini di Windows :)
    2015-01-21 22: 47: 26Z
  3. Wow, repo itu memiliki banyak alat hebat. Terima kasih!
    2015-09-13 17: 09: 03Z
  4. Bekerja dengan baik-baik saja @MinGW (MSYS) di bawah Win $; instal CPANM; lalu Git.pm; buat alias dan Anda siap berangkat.
    2016-02-04 09: 30: 26Z
  5. apa itu emulator terminal yang sangat bagus yang Anda gunakan? Saya suka hal-hal indikator prompt grafis.
    2018-01-25 23: 57: 43Z

Berdasarkan pada skrip Graphviz yang saya temukan di jawaban untuk pertanyaan terkait , saya telah meretas skrip ruby ​​ yang membuat tampilan ringkasan repositori git. Ini menghilangkan semua sejarah linear dan hanya menunjukkan komitmen "menarik", yaitu yang memiliki banyak orang tua, banyak anak, atau ditunjukkan oleh cabang atau tag. Berikut cuplikan grafik yang dihasilkannya untuk jquery :

sampel jquery

git-big-picture dan BranchMaster adalah alat serupa yang mencoba menunjukkan hanya struktur tingkat tinggi dari grafik, dengan hanya menampilkan bagaimana tag, cabang, penggabungan, dll saling terkait.

Pertanyaan ini memiliki beberapa opsi lagi.

    
43
2017-05-23 12: 34: 51Z
  1. Saya mencoba ini, tetapi tidak dapat membuat dot bekerja dengan benar dengan output untuk repo kami (42 cabang, 175 tag, 42.000 komit) ... Sayang sekali. .. Itulah yang saya cari!
    2013-12-01 20: 39: 17Z
  2. @ XavierNodet, jika repo Anda bersifat publik dan /atau Anda memiliki pesan kesalahan, dll., silakan ajukan masalah pada GitHub. Terima kasih!
    2013-12-02 03: 30: 25Z

Saya menulis alat web untuk mengubah log git menjadi grafik SVG yang cantik: Bit-Booster - Alat Menggambar Grafik Komit Offline

Unggah hasil dari git log --pretty='%h|%p|%d' langsung ke alat dan kemudian klik tautan "unduh graph.svg".

Alat ini murni dari sisi klien, jadi tidak ada data Git Anda yang dibagikan dengan server saya. Anda juga dapat menyimpan HTML + JS secara lokal dan menjalankannya menggunakan URL "file: ///". Diverifikasi pada Chrome 48 dan Firefox 43 di Ubuntu 12.04.

Ini menghasilkan HTML yang dapat diposting langsung ke halaman mana pun (termasuk mesin blogging blogspot!). Lihatlah beberapa posting blog di sini:

http://bit-booster.blogspot.ca/

Berikut tangkapan layar dari sampel file HTML yang dihasilkanoleh alat:

http://bit-booster.com/graph.html (alat)

    
42
2017-09-05 07: 53: 20Z
  1. Cara membaca kode warna ... saya pikir ini hanya mewakili cabang terpisah ...
    2016-10-18 07: 29: 39Z
  2. @ Jay, warnanya mencerminkan tingkat indentasi dari cabang tertentu, dan bahwa cabang-cabang dapat berpindah ke kolom lain dan karenanya mengubah color.s
    2016-10-28 09: 57: 34Z

Bergantung pada penampilan mereka. Saya menggunakan gitx yang membuat gambar seperti ini:

plot sederhana

Anda dapat membandingkan git log --graph vs gitk pada penggabungan gurita 24 arah (aslinya dari http://clojure-log.n01se.net/date/2008-12-24.html ):

Penggabungan gurita git 24-arah. URL asli adalah < kode > http: //lwn.net/images /ns/kernel/gitk-octopus.png</code>

    
36
2015-09-08 13: 49: 20Z
  1. Lucu ... Aku bersumpah aku mendengar kamu berkata "24-way octopus merge"!
    2012-03-23 ​​21: 46: 28Z
  2. Karena penasaran, apakah ada yang mencoba mengekstraksi rutinitas GitX (atau alat GUI git lain) menjadi rutin yang dapat dieksekusi? Jika saya tidak salah, membuat Kakao untuk menarik ke file vektor PDF tidak akan sulit, dan akan memenuhi kebutuhan OP untuk citra yang dapat dicetak dengan Q tinggi.
    2012-10-18 21: 15: 56Z
  3. Itu ada di S3 via skitch sebelum mereka mengembalikan benda mereka. Saya berharap saya masih memilikinya. :(
    2013-07-09 19: 37: 37Z
  4. Baru saja menggantinya dengan versi gitk dari lwn.net/images/ns/kernel/gitk-octopus.png , ditautkan dari clojure-log.n01se.net/date/2008-12-24.html . @Dustin: harap tidak apa-apa. Ini bukan gambar yang sama, tetapi memiliki tujuan yang sama. Dari tangkapan layar, sepertinya itu adalah bagian dari kernel linux, jadi saya kira Anda dapat menemukan komit itu dan mengambil ulang tangkapan layar gitx yang setara ....
    2013-07-12 04: 08: 07Z

Saya telah menambahkan tiga perintah khusus: git tree, git stree dan git vtree. Saya akan membahasnya dalam urutan itu.

 
[alias]
    tree = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset) %C(auto)%d%C(reset)\n         %C(black)[%cr]%C(reset)  %x09%C(black)%an: %s %C(reset)'

masukkan deskripsi gambar di sini

Dengan git stree dan git vtree saya menggunakan bash untuk membantu memformat.

 
[alias]
    logx = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset)+%C(dim black)(%cr)%C(reset)+%C(auto)%d%C(reset)++\n+++       %C(bold black)%an%C(reset)%C(black): %s%C(reset)'
    stree = !bash -c '"                                                                             \
        while IFS=+ read -r hash time branch message; do                                            \
            timelength=$(echo \"$time\" | sed -r \"s:[^ ][[]([0-9]{1,2}(;[0-9]{1,2})?)?m::g\");     \
            timelength=$(echo \"16+${#time}-${#timelength}\" | bc);                                 \
            printf \"%${timelength}s    %s %s %s\n\" \"$time\" \"$hash\" \"$branch\" \"\";          \
        done < <(git logx && echo);"'

git_stree


 
[alias]
    logx = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset)+%C(dim black)(%cr)%C(reset)+%C(auto)%d%C(reset)++\n+++       %C(bold black)%an%C(reset)%C(black): %s%C(reset)'
    vtree = !bash -c '"                                                                             \
        while IFS=+ read -r hash time branch message; do                                            \
            timelength=$(echo \"$time\" | sed -r \"s:[^ ][[]([0-9]{1,2}(;[0-9]{1,2})?)?m::g\");     \
            timelength=$(echo \"16+${#time}-${#timelength}\" | bc);                                 \
            printf \"%${timelength}s    %s %s %s\n\" \"$time\" \"$hash\" \"$branch\" \"$message\";  \
        done < <(git logx && echo);"'

git_vtree


EDIT: Ini bekerja dengan git versi 1.9a. Nilai warna 'otomatis' tampaknya memulai debutnya dalam rilis ini. Ini tambahan yang bagus karena nama cabang akan mendapatkan warna yang berbeda. Ini memudahkan untuk membedakan antara cabang lokal dan cabang jarak jauh.

    
34
2016-03-09 12: 11: 09Z
  1. fatal: bad color value 'auto' for variable '--pretty format' :(
    2014-04-03 16: 40: 00Z
  2. Ternyata versi git yang lama. Yum memiliki versi Git yang cukup lama dalam repo-nya. Dikompilasi dari sumber (1.9) dan bekerja dengan baik. Itu indah juga! Terima kasih @gospes!
    2014-04-03 19: 18: 10Z
  3. Jangan lanjutkan OS X: sed: illegal option -- r
    2014-04-27 03: 34: 13Z
  4. @ SlippD.Thompson: Saya menggunakan linux :). -R adalah untuk ekspresi reguler yang diperluas. Rupanya versi sed OSX tidak memilikinya. Mungkin Anda bisa memperbarui. Jika tidak, Anda bisa menulis ulang perintah sed tanpa regex yang diperluas.
    2014-04-28 07: 51: 20Z
  5. Untuk Mac OS X sed, gunakan -E bukan -r
    2015-06-16 00: 04: 25Z

Untuk output teks yang lebih terperinci, silakan coba:

 
git log --graph --date-order -C -M --pretty=format:"<%h> %ad [%an] %Cgreen%d%Creset %s" --all --date=short

Anda dapat menulis alias di $HOME /.gitconfig

 
[alias]
    graph = log --graph --date-order -C -M --pretty=format:\"<%h> %ad [%an] %Cgreen%d%Creset %s\" --all --date=short
    
31
2011-06-02 12: 58: 41Z

gitg : penampil repositori berbasis gtk, itu baru tapi menarik dan berguna
http://git.gnome.org/browse/gitg
Saya menggunakannya saat ini

    
27
2013-10-30 18: 50: 25Z
  1. Tampaknya ini adalah klon dari GitX dan yang cukup bagus. Rekomendasikan
    2012-03-01 11: 27: 46Z

Ini adalah pendapat saya tentang masalah ini:

Cuplikan Layar:

 Cuplikan Layar

Penggunaan:

git hist - Tampilkan riwayat cabang saat ini

git hist --all - Tampilkan grafik semua cabang (termasuk remote)

git hist master devel - Tunjukkan hubungan antara dua atau lebih cabang

git hist --branches - Tampilkan semua cabang lokal

Tambahkan --topo-order untuk mengurutkan komit secara topologis, bukan berdasarkan tanggal (default pada alias ini)

Manfaat:

  • Tampak seperti biasa --decorate, jadi dengan warna terpisah untuk nama cabang yang berbeda
  • Menambahkan email committer
  • Menambahkan tanggal relatif dan absolut komit
  • Urusan dilakukan berdasarkan tanggal

Setup:

 
git config --global alias.hist "log --graph --date-order --date=short \
--pretty=format:'%C(auto)%h%d %C(reset)%s %C(bold blue)%ce %C(reset)%C(green)%cr (%cd)'"
    
27
2017-12-07 09: 16: 05Z

Meskipun terkadang saya menggunakan gitg , selalu kembali ke baris perintah:

 
[alias]
    #quick look at all repo
    loggsa = log --color --date-order --graph --oneline --decorate --simplify-by-decoration --all
    #quick look at active branch (or refs pointed)
    loggs  = log --color --date-order --graph --oneline --decorate --simplify-by-decoration
    #extend look at all repo
    logga  = log --color --date-order --graph --oneline --decorate --all
    #extend look at active branch
    logg   = log --color --date-order --graph --oneline --decorate
    #Look with date
    logda  = log --color --date-order --date=local --graph --format=\"%C(auto)%h%Creset %C(blue bold)%ad%Creset %C(auto)%d%Creset %s\" --all
    logd   = log --color --date-order --date=local --graph --format=\"%C(auto)%h%Creset %C(blue bold)%ad%Creset %C(auto)%d%Creset %s\"        
    #Look with relative date
    logdra = log --color --date-order --graph --format=\"%C(auto)%h%Creset %C(blue bold)%ar%Creset %C(auto)%d%Creset %s\" --all
    logdr = log --color --date-order --graph --format=\"%C(auto)%h%Creset %C(blue bold)%ar%Creset %C(auto)%d%Creset %s\"  

    loga   = log --graph --color --decorate --all

    # For repos without subject body commits (vim repo, git-svn clones)
    logt  = log --graph --color --format=\"%C(auto)%h %d %<|(100,trunc) %s\"
    logta  = log --graph --color --format=\"%C(auto)%h %d %<|(100,trunc) %s\" --all        
    logtsa = log --graph --color --format=\"%C(auto)%h %d %<|(100,trunc) %s\" --all --simplify-by-decoration 

Seperti yang Anda lihat, hampir merupakan alias menyimpan keystroke, berdasarkan:

  • --color: lihat jelas
  • --graph: memvisualisasikan orang tua
  • --tanggal-tanggal: lihat repo yang paling dimengerti
  • --decorate: who is who
  • --oneline: Sering kali semua yang perlu Anda ketahui tentang komit
  • --simplify-by-decoration: dasar untuk tampilan pertama (hanya tag, gabungan yang relevan, cabang)
  • --all: menyimpan penekanan tombol dengan semua alias dengan dan tanpa opsi ini
  • --date = relatif (% ar): Memahami aktivitas dalam repo (kadang-kadang cabang sedikit melakukan komit dekat master tetapi berbulan-bulan lalu darinya)

Lihat di git versi terbaru (1.8.5 ke atas) Anda bisa mendapat manfaat dari% C (otomatis) dalam menghias placeholder% d

Dari sini yang Anda butuhkan adalah pemahaman yang baik tentang gitrevisions untuk menyaring apa pun yang Anda butuhkan (sesuatu seperti master..develop, tempat --simplify-merge bisa bantuan dengan cabang jangka panjang)

Kekuatan di balik baris perintah adalah konfigurasi cepat berdasarkan kebutuhan Anda (memahami repo bukanlah konfigurasi log kunci yang unik, jadi terkadang menambahkan --numstat, atau --raw, atau --name-status). Di sini git log dan alias cepat, kuat, dan (seiring waktu) grafik tercantik yang dapat Anda capai, bahkan lebih lagi, dengan output yang ditunjukkan secara default melalui pager (katakan kurang) Anda selalu dapat mencari dengan cepat di dalam hasil. Tidak yakin? Anda selalu bisa uraikan hasilnya dengan proyek-proyek seperti gitgraph

    
25
2015-12-18 10: 44: 59Z
  1. Bagus sekali. Menambahkan ini ke konfigurasi saya. Tapi saya sarankan mengubah% Cred% d% Creset menjadi% C (otomatis)% d% Creset yang akan memberikan warna berbeda untuk nama cabang jarak jauh atau lokal
    2015-07-01-01 16: 48: 58Z

Mengubah sedikit Jawaban keren Slipp , Anda dapat menggunakan aliasnya untuk mencatat satu saja cabang:

 
[alias]
lgBranch1 = log --graph --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)— %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative
lgBranch2 = log --graph --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n''          %C(white)%s%C(reset) %C(bold white)— %an%C(reset)' --abbrev-commit
lg = !"git lg1"

Dengan mengabaikan --all, Anda sekarang dapat melakukan

 
git lgBranch1 <branch name>

atau bahkan

 
git lgBranch1 --all
    
17
2018-08-29 20: 45: 17Z

Saya memiliki alias git log ini di ~/.gitconfig untuk melihat riwayat grafik:

 
[alias]
l = log --all --graph --pretty=format:'%C(auto)%h%C(auto)%d %s %C(dim white)(%aN, %ar)'

Dengan ini, git l akan menampilkan sesuatu seperti:

 masukkan deskripsi gambar di sini

Di Git 2.12 + Anda dapat bahkan menyesuaikan warna garis grafik menggunakan log.graphColors opsi konfigurasi.

Adapun format log, ini mirip dengan --oneline , dengan tambahan nama penulis (menghormati .mailmap) dan tanggal penulis relatif . Perhatikan bahwa sintaks %C(auto), yang memberitahu Git untuk menggunakan warna default untuk hash, dll. Didukung di Git > = 1.8.3 .

    
14
2017-08-17 07: 27: 08Z
  1. git log --graph --oneline hanya untuk memastikan penumpang tidak tersesat
    2017-02-02 09: 43: 10Z
  2. apakah ada cara untuk meletakkan nama cabang di leftside?
    2019-06-18 13: 38: 32Z

GitGraph

Menghasilkan representasi PNG atau SVG dari riwayat komit Git Anda.

https://code.google.com/p/gitgraph

    
12
2013-04-01 14: 03: 01Z
  1. Apakah ini sama? gitgraphjs.com (terlihat benar-benar bagus.)
    2015-03-17 05: 14: 51Z
  2. @ AndyHayden: Tidak. Benar-benar berbeda. Membuat grafik sejarah git menggunakan Dia
    2017-10-25 09: 46: 27Z
 
git -c core.pager='less -SRF' log --oneline --graph --decorate

Ini adalah variasi terminal saya, mirip dengan banyak jawaban di sini. Saya suka menyesuaikan bendera yang diteruskan ke less untuk mencegah pembungkus kata.

 contoh keluaran

Saya mengatur ini ke alias untuk akses cepat karena perintahnya agak rumit.

    
11
2016-01-06 03: 13: 02Z

Apakah Anda mencoba gitk atau gitk --all? Namun tidak memiliki fungsi cetak /simpan img.

    
10
2009-06-29 13: 14: 48Z
  1. gitk efisien tetapi tidak terlalu indah.
    2009-06-29 13: 19: 19Z
  2. Kenyataan bahwa itu built-in membuatnya menyenangkan dan tidak merepotkan bagi saya. Khususnya --all menunjukkan kepada Anda semua cabang.
    2019-01-04 08: 30: 03Z

Saya menyarankan tig https://github.com/jonas/tig , alat baris perintah yang jauh lebih baik untuk git.

Anda dapat menggunakan homebrew untuk menginstal tig di macOS:

 
$ brew install tig
$ tig

 masukkan deskripsi gambar di sini

    
10
2018-01-04 07: 10: 54Z

Coba ditaa . Itu dapat mengubah diagram ASCII menjadi gambar. Meskipun tidak dirancang dengan mempertimbangkan cabang Git, saya terkesan dengan hasilnya.

Sumber (file txt):

 
        +--------+
        | hotfix |
        +---+----+
            |
--*<---*<---*
       ^ 
       |
       \--*<---*
               |
           +---+----+
           | master |
           +--------+

Perintah:

 
java -jar ditaa0_9.jar ascii-graph.txt

Hasil:

 masukkan deskripsi gambar di sini

Ini juga mendukung warna latar belakang, garis putus-putus, berbagai bentuk dan banyak lagi. Lihat contohnya .

    
6
2016-03-25 19: 37: 32Z
  1. Dalam nada yang sama, casual-effects.com /markdeep sangat kuat untuk merapikan diagram seni ascii yang diatur sendiri.
    2018-08-06 14: 39: 42Z

Ada grafik komit Git yang funky sebagai salah satu demo dari Raphael perpustakaan grafik web.

Demo ini statis, tetapi seharusnya cukup mudah untuk mengambil kode dan menukar data statisnya dengan set data langsung - saya pikir itu hanya Git data yang berkomitmen dalam format JSON.

Demo ada di sini: http://dmitrybaranovskiy.github.io/raphael/github /impact.html

    
6
2016-06-07 20: 45: 25Z
  1. Itu kode grafik yang sama yang digunakan pada grafik dampak GitHub, bukan? (mis. github.com/DmitryBaranovskiy/raphael/graphs/impact )
    2012-03-21 04: 18: 28Z
  2. Semua tautan mati dan tidak lagi berfungsi.
    2016-06-07 08: 47: 40Z
  3. @ Sven: Terima kasih telah menunjukkannya. Saya telah memperbaiki tautan yang rusak untuk Anda, walaupun harap diingat bahwa jawaban ini berusia lima tahun, dan dengan demikian mungkin ada solusi yang lebih baik baru-baru ini.
    2016-06-07 20: 45: 49Z
  4. @ SlippD.Thompson kode ini sekarang ada di github.com/DmitryBaranovskiy/raphaeljs.com/tree/master/github
    2017-09-05 07: 29: 48Z

Saya tidak tahu tentang alat langsung, tapi mungkin Anda bisa meretas skrip untuk mengekspor data ke dalam format dot dan merendernya dengan graphviz.

    
5
2009-06-29 10: 57: 42Z
  1. Coba yang ini github.com/gugod/bin/blob/master/git-graphviz . Saya tidak memiliki semua dependensi di lingkungan perusahaan saya, jadi mengubah io perintah itu menjadi perl `git log sederhana [...]` perintah bekerja untuk saya.
    2012-05-05 00: 27: 23Z
  2. Jika Anda menggunakan mac dan ingin mencoba skrip ini, Anda dapat mengambil perl dengan brew install perl dot dan kemudian cpan common::sense IO::all untuk mendapatkan dependensi. Kemudian, hanya pipa output ke perintah yang sesuai, seperti git-graphviz | dot -Tpng -o repo.png. Namun, hasilnya tidak jauh berbeda dari git-big-picture .
    2013-10-02 02: 26: 52Z

Untuk pengguna OSX, saya telah mengambil contoh @gospes dan sedikit memodifikasinya untuk gsed (gnu-sed diinstal melalui homebrew) dan menyesuaikan warna (untuk bekerja dengan latar belakang hitam, tidak yakin bagaimana contoh aslinya dapat mengubah cara) itu ada dalam contoh karena ia menentukan teks hitam pada terminal dengan latar belakang hitam).

 
[alias]
    # tree, vtree, stree support
    logx = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset)+%C(bold black)(%cr)%C(reset)+%C(auto)%d%C(reset)++\n+++       %C(bold black)%an%C(reset)%C(bold black): %s%C(reset)'
    tree = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset) %C(auto)%d%C(reset)\n         %C(bold black)[%cr]%C(reset)  %x09%C(bold black)%an: %s %C(reset)'
    stree = !bash -c '" \
    while IFS=+ read -r hash time branch message; do \
        timelength=$(echo \"$time\" | gsed -r \"s:[^ ][[]([0-9]{1,2}(;[0-9]{1,2})?)?m::g\"); \
        timelength=$(echo \"16+${#time}-${#timelength}\" | bc); \
        printf \"%${timelength}s    %s %s %s\n\" \"$time\" \"$hash\" \"$branch\" \"\"; \
    done < <(git logx && echo);"' | less -r
    vtree = !bash -c '" \
    while IFS=+ read -r hash time branch message; do \
      timelength=$(echo \"$time\" | gsed -r \"s:[^ ][[]([0-9]{1,2}(;[0-9]{1,2})?)?m::g\"); \
      timelength=$(echo \"16+${#time}-${#timelength}\" | bc); \
      printf \"%${timelength}s    %s %s %s\n\" \"$time\" \"$hash\" \"$branch\" \"$message\"; \
    done < <(git logx && echo);"' | less -r

Kunci untuk OSX adalah menginstal gnu sed (yang memiliki opsi -r). Paling mudah dilakukan dengan homebrew, yang tidak akan menimpa sistem yang diinstal sed, tetapi sebaliknya akan menginstal gnu sed sebagai "gsed". Semoga ini membantu @ SlippD.Thompson yang berkomentar di atas tentang OSX tidak berfungsi.

    
4
2017-05-23 12: 34: 51Z

beberapa alias di ~ /.oh-my-zsh /plugins /git /git.plugin.zsh

 
gke='\gitk --all $(git log -g --pretty=%h)'
glg='git log --stat'
glgg='git log --graph'
glgga='git log --graph --decorate --all'
glgm='git log --graph --max-count=10'
glgp='git log --stat -p'
glo='git log --oneline --decorate'
glog='git log --oneline --decorate --graph'
gloga='git log --oneline --decorate --graph --all'
glol='git log --graph --pretty='\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --abbrev-commit'
glola='git log --graph --pretty='\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --abbrev-commit --all'
    
4
2018-07-12 11: 46: 53Z

Jika repositori Anda berada di Gitlab, Anda dapat menggunakan representasi grafiknya seperti yang diterjemahkan sebagai SVG di browser Anda.

 masukkan deskripsi gambar di sini

    
4
2019-02-05 10: 49: 44Z

Selain jawaban 'Slipp D. Thompson', saya mengusulkan Anda untuk menambahkan alias ini untuk memiliki dekorasi yang sama tetapi dalam satu baris dengan komit:

 
git config --global alias.tre "log --graph --decorate --pretty=oneline --abbrev-commit --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)'"
    
2
2018-03-06 13: 34: 59Z
  1. Hai, saya sadar dan sepenuhnya memahami kekhawatiran Anda !! Terima kasih atas pesan Anda;)
    2018-03-21 08: 14: 43Z
sumber ditempatkan sini
Pertanyaan Lain