Ağaçta moda gibi git dalının çıktısı


161

Şu anda, "git branch" yazdığımda

şubelerimi keyfi bir sırayla listeler.

"Git şube" benim gibi fasion gibi bir ağaç benim listede listelenirse tercih ederim ne olurdu:

master
|-- foo
  |-- foo1
  |-- foo2
|-- bar
  |-- bar4

Burada, foo & bar ustasından dallanmıştı; foo1 & foo2, foodan dallanmıştır; bar4, çubuktan dallandı.

Bunu başarmak kolay mı?

[Yalnızca komut satırı yardımcı programları. Bunun zsh / vim iş akışıma uyması gerekiyor.]


Buradaki cevapların hiçbiri (kendi dahilim) gerçekten istediğini düşündüğüm ve istediğimi bildiğim şeyler için yeterli bir çözüm sunmuyor gibi görünüyor. Şansım olduğunda bunu çözmek için yeni bir yardımcı program yazacağım. Muhtemelen onu arayacak git_tree. Burada olduğu gibi bir şey çıktılar arc flow: stackoverflow.com/questions/54227968/… . Belki bir gün git'in içine bile girebilirim.
Gabriel Staples

Bu kişi de aynı şeyi istiyor gibi görünüyor: reddit.com/r/git/comments/282c1f/…
Gabriel Staples

git log --graphbence yeterli.
DawnSong

Yanıtlar:


204

Aşağıdaki cevapgit log şunları kullanır :

Benzer bir yaklaşımdan 2009 yılında " Terminalde bir Git ağacı gösterilemiyor " ifadesinden bahsettim :

git log --graph --pretty=oneline --abbrev-commit

Ama tam olarak kullandığım " git log --graph kullanarak etiket adı ve şube adı nasıl görüntülenir " (2011):

git config --global alias.lgb "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset%n' --abbrev-commit --date=relative --branches"

git lgb

Orijinal cevap (2010)

git show-branch --list aradığınıza yaklaşıyor (topo siparişiyle)

--topo-order

Varsayılan olarak, dallar ve bunların taahhütleri ters kronolojik sırada gösterilir.
Bu seçenek, topolojik sırada görünmelerini sağlar (yani, soyundan gelen taahhütler ebeveynlerinden önce gösterilir).

Ancak git wtf aracı da yardımcı olabilir . Misal:

$ git wtf
Local branch: master
[ ] NOT in sync with remote (needs push)
    - Add before-search hook, for shortcuts for custom search queries. [4430d1b] (edwardzyang@...; 7 days ago)
Remote branch: origin/master (git@gitorious.org:sup/mainline.git)
[x] in sync with local

Feature branches:
{ } origin/release-0.8.1 is NOT merged in (1 commit ahead)
    - bump to 0.8.1 [dab43fb] (wmorgan-sup@...; 2 days ago)
[ ] labels-before-subj is NOT merged in (1 commit ahead)
    - put labels before subject in thread index view [790b64d] (marka@...; 4 weeks ago)
{x} origin/enclosed-message-display-tweaks merged in
(x) experiment merged in (only locally)

NOTE: working directory contains modified files

git-wtf sana gösterir:

  • Bir izleme dalıysa, şubenizin uzak repo ile ilişkisi.
  • Bir özellik dalıysa, dalınızın özellik dışı ("sürüm") dallarla ilişkisi.
  • Bir sürüm dalıysa, dalınızın özellik dalları ile ilişkisi

% Ae kullanarak yazar e-postasını da gösteren güzel biçiminizin bir varyasyonunu kullanıyorsunuz. Ayrıca hg smartlog benzemek için "sl" ile takma ad çağırmayı tercih.
fiorix

git-wtfAraca bağlantı için çok teşekkürler , bu inanılmaz derecede faydalı. Süslü bir git logağaca bakarken çizebileceğim sonuçların temelini yıkmış görünüyor , ama güzel bir özetle.
Luke Davis

Ödeme şubesinin hangi şubeden teslim edildiğini göstermesi için bir yol bulmayı umuyordum
Chang Zhao

@ChangZhao Bu, "ana dalı bulmak" ile benzerdir ve yapılması kolay değildir: stackoverflow.com/a/3162929/6309 , stackoverflow.com/a/56452713/6309
VonC

147

Tam olarak istediğin şey değil, ama

git log --graph --simplify-by-decoration --pretty=format:'%d' --all

oldukça iyi bir iş çıkarıyor. Etiketleri ve uzak dalları da gösterir. Bu herkes için arzu edilmeyebilir, ancak yararlı buluyorum. --simplifiy-by-decorationburada gösterilen referansları sınırlamanın en büyük hilesi.

Günlüğümü görüntülemek için benzer bir komut kullanıyorum. gitkKullanımımı tamamen onunla değiştirebildim :

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

Bu takma adları ~ / .gitconfig dosyama ekleyerek kullanın:

[alias]
    l = log --graph --oneline --decorate
    ll = log --graph --oneline --decorate --branches --tags
    lll = log --graph --oneline --decorate --all

Düzenleme: Daha basit seçenek bayraklarını kullanmak için önerilen günlük komutu / takma adlar güncellendi.


1
IMO bu en iyi cevap, ama bence SourceTree veya gitk veya benzeri bu tür bir şey için gitmek için bir yol.
JaKXz

Bu başlangıçtaki dalları görüntüler. Bunu yerel şubeler için göstermenin bir yolu var mı?
Jeff

Yerine @Jeff --allile --branches --tagsmuhtemelen bunu yapardı.
nocash

mükemmel cevap. Aradığım şey, burada buldum. Harika.
AMIC MING

12

Aşağıdaki örnek, bağlı ebeveynleri de gösterir:

git log --graph --all \
--format='%C(cyan dim) %p %Cred %h %C(white dim) %s %Cgreen(%cr)%C(cyan dim) <%an>%C(bold yellow)%d%Creset'

10

Adlı bir araç kullanabilirsiniz gitk.


Gitk'i seviyorum, ama gitkMac'te çözemedim . Eğer herhangi bir öneriniz varsa, lütfen bana bildirin. Kullanmaya başladım Github Desktopama komut satırında çalışmayı seviyorum.
AMIC MING

6

Ubuntu üzerinde test edildi:

sudo apt install git-extras
git-show-tree

Bu, burada en çok oylanan 2 cevaba benzer bir etki yaratır.

Kaynak: http://manpages.ubuntu.com/manpages/bionic/man1/git-show-tree.1.html


Ayrıca, arcanist yüklediyseniz (düzeltme: Uber'in arcanist çatalı yüklü - kurulum talimatları için bu cevabın altına bakın ), arc flowyukarı akış bağımlılıklarının güzel bir bağımlılık ağacını gösterir (yani: daha önce yoluyla arc flow new_branchveya manuel olarak ayarlanmış git branch --set-upstream-to=upstream_branch).

Bonus git hileleri:

İlişkili:

  1. "Ark grefti" ve "ark yaması" arasındaki fark nedir?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.