Đầu ra của nhánh git trong cây như thời trang


160

Ngay bây giờ, khi tôi gõ "git chi nhánh"

nó liệt kê các chi nhánh của tôi theo thứ tự tùy ý.

Những gì tôi thích sẽ là nếu "nhánh git" liệt kê đầu ra của tôi trong một cây như fading, đôi khi như:

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

Ở đây, foo & bar được phân nhánh từ chủ; foo1 & foo2 được phân nhánh từ foo; bar4 được phân nhánh từ thanh.

Đây có phải là dễ dàng để thực hiện?

[Chỉ tiện ích dòng lệnh. Điều này cần phải phù hợp với quy trình làm việc zsh / vim của tôi.]


Không có câu trả lời nào ở đây (bao gồm của riêng tôi) dường như cung cấp một giải pháp thích hợp cho những gì tôi nghĩ bạn thực sự muốn, và cho những gì tôi biết tôi muốn. Tôi sẽ viết một tiện ích mới để giải quyết vấn đề này khi tôi có cơ hội. Có lẽ sẽ gọi nó git_tree. Nó sẽ xuất ra một cái gì đó giống như arc flowở đây: stackoverflow.com/questions/54227968/ . Có lẽ một ngày nào đó tôi thậm chí có thể khiến nó được hợp nhất vào chính git.
Gabriel Staples

Người này dường như cũng muốn điều tương tự: reddit.com/r/git/comments/282c1f/ Kẻ
Gabriel Staples

git log --graphTôi nghĩ là đủ.
DawnSong

Câu trả lời:


203

Câu trả lời dưới đây sử dụnggit log :

Tôi đã đề cập đến một cách tiếp cận tương tự vào năm 2009 với " Không thể hiển thị cây Git trong thiết bị đầu cuối ":

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

Nhưng cái đầy đủ tôi đang sử dụng là trong " Cách hiển thị tên thẻ và tên chi nhánh bằng 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

Câu trả lời gốc (2010)

git show-branch --list đến gần với những gì bạn đang tìm kiếm (với thứ tự topo)

--topo-order

Theo mặc định, các nhánh và cam kết của chúng được hiển thị theo thứ tự thời gian đảo ngược.
Tùy chọn này làm cho chúng xuất hiện theo thứ tự tôpô (nghĩa là các cam kết con cháu được hiển thị trước cha mẹ của chúng).

Nhưng công cụ git wtf cũng có thể giúp . Thí dụ:

$ 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 cho bạn thấy:

  • Chi nhánh của bạn liên quan đến repo từ xa như thế nào, nếu đó là chi nhánh theo dõi.
  • Chi nhánh của bạn liên quan đến các nhánh không có tính năng ("phiên bản") như thế nào, nếu đó là một nhánh tính năng.
  • Chi nhánh của bạn liên quan đến các nhánh tính năng như thế nào, nếu đó là một nhánh phiên bản

Được sử dụng một biến thể của định dạng đẹp của bạn cũng hiển thị email của tác giả, sử dụng% ae. Ngoài ra, tôi thích gọi bí danh bằng "sl" để giống với smartlog của hg.
fiorix

Cảm ơn rất nhiều về liên kết đến git-wtfcông cụ, nó cực kỳ hữu ích. Có vẻ như về cơ bản phá vỡ các kết luận tôi sẽ rút ra khi nhìn chằm chằm vào một git logcái cây ưa thích , nhưng trong một bản tóm tắt tốt đẹp.
Luke Davis

Tôi đã hy vọng tìm ra một cách để chi nhánh thanh toán hiển thị từ chi nhánh nào đã được kiểm tra từ
Chang Zhao

@ChangZhao Điều đó tương tự như "tìm nhánh cha mẹ" và điều đó không dễ thực hiện: stackoverflow.com/a/3162929/6309 , stackoverflow.com/a/56452713/6309
VonC

147

Nó không hoàn toàn là những gì bạn yêu cầu, nhưng

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

làm một công việc khá tốt. Nó cho thấy các thẻ và các chi nhánh từ xa là tốt. Điều này có thể không được mong muốn cho tất cả mọi người, nhưng tôi thấy nó hữu ích. --simplifiy-by-decorationlà mẹo lớn ở đây để giới hạn các ref được hiển thị.

Tôi sử dụng một lệnh tương tự để xem nhật ký của tôi. Tôi đã có thể thay thế hoàn toàn gitkviệc sử dụng của mình với nó:

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

Tôi sử dụng nó bằng cách đưa các bí danh này vào tệp ~ / .gitconfig của mình:

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

Chỉnh sửa: Cập nhật lệnh / bí danh nhật ký được đề xuất để sử dụng cờ tùy chọn đơn giản hơn.


1
IMO đây là câu trả lời tốt nhất ở đây, nhưng tôi nghĩ SourceTree hoặc gitk hoặc tương tự là cách để đi cho loại điều này.
JaKXz

Điều này hiển thị các chi nhánh tại điểm gốc. Có cách nào để có được điều này để hiển thị cho các chi nhánh địa phương?
Jeff

@Jeff thay thế --allbằng --branches --tagscó thể sẽ làm điều đó.
nocash

câu trả lời hoàn hảo. Những gì tôi đang tìm kiếm, tôi tìm thấy ở đây. Tuyệt quá.
AMIC MING

12

Ví dụ sau đây cho thấy cha mẹ cam kết là tốt:

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

Bạn có thể sử dụng một công cụ được gọi là gitk.


Tôi yêu gitk, nhưng tôi đã không tìm ra gitkở Mac. Nếu bạn có bất kỳ đề nghị, xin vui lòng cho tôi biết. Tôi bắt đầu sử dụng Github Desktopnhưng thích làm việc trên dòng lệnh.
AMIC MING

6

Đã thử nghiệm trên Ubuntu:

sudo apt install git-extras
git-show-tree

Điều này tạo ra một hiệu ứng tương tự như 2 câu trả lời được đánh giá cao nhất ở đây.

Nguồn: http://manpages.ubfox.com/manpages/bionic/man1/git-show-tree.1.html


Ngoài ra, nếu bạn đã cài đặt Arcanist (chỉnh sửa: ngã ba Arcanist của Uber đã cài đặt - xem phần dưới của câu trả lời này ở đây để biết hướng dẫn cài đặt), arc flowhiển thị một cây phụ thuộc tuyệt đẹp của các phụ thuộc ngược dòng (ví dụ: được đặt trước đó thông qua arc flow new_branchhoặc thủ công thông qua git branch --set-upstream-to=upstream_branch).

Thủ thuật git tiền thưởng:

Liên quan:

  1. Sự khác biệt giữa `arc arc` và` arc patch` là gì?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.