2010-03-10 23 views
88

Ngay bây giờ, khi tôi nhập "git branch"Đầu ra của nhánh git trong cây như thời trang

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

Những gì tôi muốn là nếu "git branch" được liệt kê đầu ra của tôi trong một cây như fasion, somethign như:

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

đâu đây, foo & thanh được phân nhánh từ thạc sĩ; foo1 & foo2 được phân nhánh từ foo; bar4 được phân nhánh từ thanh.

Điều này có dễ thực hiện không?

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

Trả lời

106

Các answer below sử dụng git log:.

tôi đã đề cập một cách tiếp cận tương tự vào năm 2009 với "Unable to show a Git tree in terminal":

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

Nhưng đầy đủ một trong tôi có được sử dụng là trong "How to display the tag name and branch name using 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ề những gì bạn đang tìm kiếm (với thứ tự topo)

--topo-order 

Theo mặc định, các ngành và các cam kết của họ được trình bày 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ự topo (tức là, các cam kết hậu duệ được hiển thị trước cha mẹ của chúng).

Nhưng công cụ git wtf có thể help too. Ví dụ:

$ git wtf 
Local branch: master 
[ ] NOT in sync with remote (needs push) 
    - Add before-search hook, for shortcuts for custom search queries. [4430d1b] ([email protected]; 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] ([email protected]; 2 days ago) 
[ ] labels-before-subj is NOT merged in (1 commit ahead) 
    - put labels before subject in thread index view [790b64d] ([email protected]; 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:

  • Làm thế nào chi nhánh của bạn liên quan đến việc repo từ xa, nếu đó là một chi nhánh theo dõi.
  • Cách chi nhánh của bạn liên quan đến các chi nhánh phi ("phiên bản"), nếu đó là chi nhánh tính năng.
  • Làm thế nào chi nhánh của bạn liên quan đến các ngành chức năng, nếu đó là một chi nhánh phiên bản
+0

Được sử dụng một biến thể của định dạng khá bạn có hiển thị email của tác giả là tốt, 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

+0

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

8

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

+0

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

105

Nó không hoàn toàn 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ó cũng hiển thị các thẻ và các nhánh từ xa.Đ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-decoration là mẹo lớn ở đây để giới hạn các lần hiển thị được hiển thị.

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

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

tôi sử dụng nó bằng cách bao gồm những bí danh trong file ~/.gitconfig tôi:

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

Edit: Cập nhật gợi ý log lệnh/bí danh để sử dụng cờ tùy chọn đơn giản hơn.

+1

IMO đây là câu trả lời hay nhất ở đây, nhưng tôi nghĩ [SourceTree] (http://sourcetreeapp.com/) hoặc gitk hoặc tương tự là cách để đi cho loại điều này. – JaKXz

+0

Đ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

+0

@Jeff thay thế '--all' bằng' --branches --tags' có thể sẽ làm điều đó. – nocash

7

Ví dụ sau đây cho thấy cam kết cha mẹ cũng như:

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' 
+1

Không hoạt động trên Windows. –

Các vấn đề liên quan