Output dari cabang git di pohon seperti mode

161

Saat ini, ketika saya mengetik "git branch"

daftar cabang saya dalam urutan acak.

Apa yang saya inginkan jika "git branch" mendaftarkan output saya di pohon seperti fasion, kadang-kadang seperti:

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

Di mana di sini, foo & bar bercabang dari master; foo1 & foo2 bercabang dari foo; bar4 bercabang dari bar.

Apakah ini mudah dicapai?

[Utilitas baris perintah saja. Ini harus sesuai dengan alur kerja zsh / vim saya.]

segera
sumber
Tidak ada jawaban di sini (termasuk saya sendiri) yang tampaknya memberikan solusi yang memadai untuk apa yang saya pikir Anda inginkan, dan untuk apa yang saya tahu saya inginkan. Saya akan menulis utilitas baru untuk menyelesaikan ini ketika saya mendapatkan kesempatan. Mungkin akan menyebutnya git_tree. Ini akan menampilkan sesuatu seperti di arc flowsini: stackoverflow.com/questions/54227968/… . Mungkin suatu hari nanti aku bahkan bisa memasukkannya ke git itu sendiri.
Gabriel Staples
Orang ini tampaknya menginginkan hal yang sama juga: reddit.com/r/git/comments/282c1f/… ...
Gabriel Staples
git log --graphsudah cukup, saya pikir.
DawnSong

Jawaban:

204

The jawaban di bawah ini menggunakan git log:

Saya menyebutkan pendekatan serupa pada tahun 2009 dengan " Tidak dapat menampilkan pohon Git di terminal ":

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

Tetapi yang lengkap yang saya gunakan adalah dalam " Cara menampilkan nama tag dan nama cabang menggunakan git log --graph " (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

Jawaban asli (2010)

git show-branch --list mendekati apa yang Anda cari (dengan urutan topo)

--topo-order

Secara default, cabang dan komitnya ditampilkan dalam urutan kronologis terbalik.
Pilihan ini membuat mereka muncul dalam urutan topologi (yaitu, komitmen turunan ditunjukkan di depan orang tua mereka).

Tetapi alat git wtf juga bisa membantu . Contoh:

$ 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 ([email protected]: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 menunjukkan kepada Anda:

  • Bagaimana cabang Anda berhubungan dengan repo jarak jauh, jika cabang pelacakan.
  • Bagaimana cabang Anda berhubungan dengan cabang non-fitur ("versi"), jika itu cabang fitur.
  • Bagaimana cabang Anda berhubungan dengan cabang fitur, jika cabang versi
VONC
sumber
Telah menggunakan variasi format cantik Anda yang juga menampilkan email penulis, menggunakan% ae. Saya juga lebih suka memanggil alias dengan "sl" untuk menyerupai smartlog hg.
fiorix
Terima kasih banyak untuk tautan ke git-wtfalat ini, ini sangat berguna. Tampaknya pada dasarnya memecah kesimpulan yang saya akan menarik dari menatap git logpohon mewah , tetapi dalam ringkasan yang bagus.
Luke Davis
Saya berharap untuk menemukan cara agar cabang checkout harus menunjukkan dari cabang mana itu diperiksa
Chang Zhao
@ ChangZhao Itu mirip dengan "menemukan cabang induk", dan itu tidak mudah dilakukan: stackoverflow.com/a/3162929/6309 , stackoverflow.com/a/56452713/6309
VonC
147

Bukan itu yang kau minta, tapi

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

melakukan pekerjaan yang cukup bagus. Ini menunjukkan tag dan cabang jarak jauh juga. Ini mungkin tidak diinginkan untuk semua orang, tetapi saya merasa ini berguna. --simplifiy-by-decorationadalah trik besar di sini untuk membatasi referensi yang ditampilkan.

Saya menggunakan perintah serupa untuk melihat log saya. Saya sudah bisa sepenuhnya mengganti gitkpenggunaan saya dengan itu:

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

Saya menggunakannya dengan memasukkan alias ini ke file ~ / .gitconfig saya:

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

Sunting: Perintah log yang diperbarui / alias untuk menggunakan flag opsi yang lebih sederhana.

nocash
sumber
1
IMO ini adalah jawaban terbaik di sini, tapi saya pikir SourceTree atau gitk atau sejenisnya adalah cara untuk pergi untuk hal semacam ini.
JaKXz
Ini menampilkan cabang di tempat asalnya. Apakah ada cara untuk menampilkan ini untuk cabang lokal?
Jeff
@ Jeff mengganti --alldengan --branches --tagsmungkin akan melakukannya.
nocash
jawaban sempurna. Apa yang saya cari, saya temukan di sini. Bagus.
AMIC MING
12

Contoh berikut juga menunjukkan komitmen orang tua:

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'
Ben
sumber
10

Anda dapat menggunakan alat yang disebut gitk.

Vladimir Prudnikov
sumber
Saya suka gitk, tapi saya tidak tahu gitkdi Mac. Jika Anda memiliki saran, harap beri tahu saya. Saya mulai menggunakan Github Desktoptetapi senang bekerja di baris perintah.
AMIC MING
6

Diuji di Ubuntu:

sudo apt install git-extras
git-show-tree

Ini menghasilkan efek yang mirip dengan 2 jawaban yang paling banyak dipilih di sini.

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


Juga, jika Anda telah menginstal arcanist (koreksi: garpu arcanist Uber diinstal - lihat bagian bawah jawaban ini di sini untuk instruksi instalasi), arc flowmemperlihatkan pohon dependensi yang indah dari dependensi hulu (yaitu: yang ditetapkan sebelumnya melalui arc flow new_branchatau secara manual via git branch --set-upstream-to=upstream_branch).

Trik git bonus:

Terkait:

  1. Apa perbedaan antara `arc graft` dan` arc patch`?
Gabriel Staples
sumber
-1

Bagi mereka yang menggunakan Github, mereka memiliki penampil jaringan cabang yang tampaknya lebih mudah dibaca

kip2
sumber