Hình dung cấu trúc liên kết nhánh trong Git


883

Tôi đang chơi với Git một cách cô lập trên chính chiếc máy của mình và tôi cảm thấy khó khăn khi duy trì một mô hình tinh thần của tất cả các chi nhánh và cam kết của mình. Tôi biết tôi có thể làm git logđể xem lịch sử cam kết từ nơi tôi đang ở, nhưng có cách nào để xem toàn bộ địa hình chi nhánh, một cái gì đó giống như các bản đồ ASCII này dường như được sử dụng ở mọi nơi để giải thích các chi nhánh không?

      .-A---M---N---O---P
     /     /   /   /   /
    I     B   C   D   E
     \   /   /   /   /
      `-------------'

Nó chỉ cảm thấy như ai đó đi cùng và cố gắng chọn kho lưu trữ của tôi sẽ gặp khó khăn khi tìm ra chính xác những gì đang diễn ra.

Tôi đoán tôi bị ảnh hưởng bởi trình duyệt phát trực tuyến của AccuRev ...



1
@ leif81, một nửa trùng lặp, cho tôi. @Masi loại trừ rõ ràng gitk trong câu hỏi của mình.
Stewol

Câu trả lời:


1082

Sử dụng git log --graphhoặc gitk. (Cả hai cũng chấp nhận --all, sẽ hiển thị tất cả các nhánh thay vì chỉ các nhánh hiện tại.)

Để biết tên chi nhánh và chế độ xem nhỏ gọn, hãy thử:

git log --graph --decorate --oneline

47
Điều này thậm chí không gắn nhãn các cam kết với các chi nhánh. Tôi sẽ không gọi đây là một hình dung tốt như vốn có.
Roman Starkov

7
Cảm ơn! gitg cũng có --alltùy chọn và cũng dán nhãn cho các cam kết. Tôi cũng không bao giờ thấy trong danh sách thả xuống rằng bạn có thể chọn tất cả các chi nhánh ở đó.
Thomas

210
Tôi muốn giới thiệu git log --graph --decorate --oneline- hiển thị một cam kết trên mỗi dòng và trang trí với tên chi nhánh.
sleske

8
tig (một khách hàng git ncurse) cũng cung cấp --alltùy chọn. Khá tiện dụng!
Pierre-Adrien Buisson

5
Xem thêm câu trả lời của Andrew liên quan đến --simplify-by-decorationtùy chọn.
ruvim

483

Tôi thường sử dụng

git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"

Với màu sắc (nếu vỏ của bạn là Bash):

git log --graph --full-history --all --color \
        --pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"

Điều này sẽ in đại diện dựa trên văn bản như thế này:

* 040cc7c       (HEAD, master) Manual is NOT built by default
* a29ceb7       Removed offensive binary file that was compiled on my machine and was hence incompatible with other machines.
| * 901c7dd     (cvc3) cvc3 now configured before building
| * d9e8b5e     More sane Yices SMT solver caller
| | * 5b98a10   (nullvars) All uninitialized variables get zero inits
| |/
| * 1cad874     CFLAGS for cvc3 to work successfully
| *   1579581   Merge branch 'llvm-inv' into cvc3
| |\
| | * a9a246b   nostaticalias option
| | * 73b91cc   Comment about aliases.
| | * 001b20a   Prints number of iteration and node.
| |/
|/|
| * 39d2638     Included header files to cvc3 sources
| * 266023b     Added cvc3 to blast infrastructure.
| * ac9eb10     Initial sources of cvc3-1.5
|/
* d642f88       Option -aliasstat, by default stats are suppressed

(Bạn chỉ có thể sử dụng git log --format=oneline, nhưng nó sẽ buộc các thông điệp cam kết thành các số, trông IMHO ít đẹp hơn).

Để tạo một lối tắt cho lệnh này, bạn có thể muốn chỉnh sửa ~/.gitconfigtệp của mình :

[alias]
  gr = log --graph --full-history --all --color --pretty=tformat:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s%x20%x1b[33m(%an)%x1b[0m"

Tuy nhiên, như Sodel các ghi chú từ vựng trong các bình luận, lệnh định dạng dài như vậy rất khó để ghi nhớ. Thông thường, đó không phải là vấn đề vì bạn có thể đặt nó vào ~/.gitconfigtệp. Tuy nhiên, nếu đôi khi bạn phải đăng nhập vào một máy từ xa nơi bạn không thể sửa đổi tệp cấu hình, bạn có thể sử dụng phiên bản đơn giản hơn nhưng nhanh hơn để nhập:

git log --graph --oneline

10
Nếu bạn thích ngày: git log --graph --full-history --all --color --date = short --pretty = format: "% x1b [31m% h% x09% x1b [32m% d% x1b [ 0m% x20% quảng cáo% s "
sehugg

7
--oneline là một thay thế đáng nhớ hơn cho tất cả các định dạng sâu sắc đẹp.
Daniel Ralston

1
@SodeltheVociferous, thực sự, tôi đã không tiếp cận vấn đề từ phía bạn nói về; Tôi mở rộng câu trả lời của mình.
P Shved

2
Lưu ý: --full-historychỉ liên quan khi sử dụng --simplify-by-decorationhoặc chỉ định filepath.
Slipp D. Thompson

2
Tôi có thể hỏi bạn lấy chuỗi định dạng từ đâu không? Hay làm thế nào trên trái đất bạn đã pha chế điều đó?
elliotwesoff

444

Tôi có 3 bí danh (và 4 bí danh để sử dụng nhanh) mà tôi thường ném vào ~/.gitconfigtệp của mình :

[alias]
    lg = lg1
    lg1 = lg1-specific --all
    lg2 = lg2-specific --all
    lg3 = lg3-specific --all

    lg1-specific = 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(auto)%d%C(reset)'
    lg2-specific = 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(auto)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'
    lg3-specific = 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 cyan)(committed: %cD)%C(reset) %C(auto)%d%C(reset)%n''          %C(white)%s%C(reset)%n''          %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)'

git lg/ git lg1trông như thế này:

git lg1

git lg2 trông như thế này:

git lg2

git lg3trông như thế này:

git lg3

Cần lưu ý rằng điều này không có nghĩa là một giải pháp cuối cùng là tất cả, đó là một mẫu để bạn thay đổi, thêm và sửa theo ý thích của mình. Nếu bạn muốn sử dụng chúng, khuyến nghị của tôi là:

  1. Thêm chúng vào .gitconfig,
  2. Tùy chỉnh theo ý thích của bạn (lựa chọn màu sắc khác nhau, sắp xếp dòng khác nhau cho phiên bản 2 và 3 dòng, v.v.),
  3. Và sau đó lưu một bản sao vào Gist hoặc công cụ đoạn mã khác để bạn có thể sao chép và dán nó vào .gitconfigs trong tương lai (hoặc phiên bản thay thế kiểm soát các dotfiles của bạn, tất nhiên) .

Lưu ý: Câu trả lời được sao chép từ và được cải thiện dựa trên câu trả lời tại stackoverflow.com/questions/1057564/pretty-git-branch-graphs vì nó phù hợp hơn nhiều so với ở đây. Để lại bản sao cho câu hỏi khác vì lý do lịch sử, bây giờ, nó đã đóng lại và câu trả lời được tham chiếu bởi một loạt các câu trả lời khác.


10
Gợi ý: thay thế %C(bold yellow)với %C(auto)cho có màu sắc khác nhau cho HEAD, địa phươngcác chi nhánh từ xa ( ref ).
Vào

2
Lưu ý rằng bạn có thể tránh tự thêm thụt lề trong chuỗi định dạng của mình bằng cách sử dụng %w(); bằng cách này, bạn cũng có thể bao bọc chính xác các thông điệp cam kết dài hơn hoặc nhiều dòng mà không làm hỏng biểu đồ.
charliereen

1
@ mbadawi23 Chúng là dự phòng vì sự thống nhất trên các cài đặt nền tảng và Git. --abbrev-commitỞ trong đó bởi vì các dòng thứ 2-thứ 3 được thụt vào bằng tay và tôi muốn chắc chắn rằng nó sẽ sử dụng SHA ngắn để an toàn hơn là xin lỗi. --decoratecũng ở trong đó bởi vì mặc dù các mặc định của Git làm điều tương tự, nhưng có thể được cấu hình khác nhau hoặc khác nhau trong các phiên bản Git khác nhau cho những thứ này, tôi hoàn toàn muốn trang trí. Cuối cùng, các cờ thừa / thừa không tệ ở đây, điều này có trong một tệp; nó không phải là thứ bạn gõ mọi lúc
Slipp D. Thompson

1
@TimothyPulliam Ở cuối mỗi dòng đại diện cho đầu của mỗi nhánh / thẻ, bạn sẽ thấy tên nhánh / thẻ được liên kết trong ngoặc đơn, ví dụ: trong lg1& lg2ảnh chụp màn hình bạn có thể thấy (origin/test_on_10.8)hiển thị nhánh từ xa và trong lg2ảnh chụp màn hình bạn có thể xem (HEAD -> master, origin/master, origin/HEAD)hiển thị cả vị trí địa phương và từ xa của masterchi nhánh và HEAD. Điều này phù hợp với những gì các công cụ GUI trực quan hóa chi nhánh phổ biến cho Git (gitk, SourceTree, TortoiseGit, Tower, Fork, GitX), mặc dù có độ dài hơn một chút (một số công cụ GUI sử dụng mã màu) .
Slipp D. Thompson

2
@TimothyPulliam Để hiểu những gì cam kết là một phần của mỗi chi nhánh, bạn phải theo dõi trực quan đường kẻ màu. Gần như mọi công cụ không giúp bạn nhiều cho việc này vì Git cam kết không thực sự thuộc về bất kỳ chi nhánh nào . Nếu không có chi nhánh / thẻ tham chiếu một cam kết và nó biến mất (nhưng không được thu gom rác trong khoảng 2 tuần); thêm một nhánh / thẻ tham chiếu đến một cam kết không được ước tính trước đó và nó xuất hiện lại. Tôi hy vọng tất cả điều này có ý nghĩa.
Slipp D. Thompson

236

Đối với bất kỳ công thức nấu ăn nào (dựa trên git log hoặc gitk), bạn có thể thêm --simplify-by-decorationđể thu gọn các phần tuyến tính không thú vị của lịch sử. Điều này làm cho nhiều cấu trúc liên kết có thể nhìn thấy cùng một lúc. Bây giờ tôi có thể hiểu lịch sử lớn sẽ không thể hiểu được nếu không có tùy chọn này!

Tôi cảm thấy cần phải đăng bài này vì nó dường như không được biết đến nhiều như vậy. Nó không xuất hiện trong hầu hết các câu hỏi về Stack Overflow về trực quan hóa lịch sử và tôi đã mất khá nhiều tìm kiếm để tìm kiếm - ngay cả sau khi tôi biết tôi muốn nó! Cuối cùng tôi đã tìm thấy nó trong báo cáo lỗi Debian này . Đề cập đầu tiên về Stack Overflow dường như là câu trả lời này của Antoine Pelisse.


3
Hoàn hảo - chính xác những gì tôi đang tìm kiếm! Nó sẽ nhận được nhiều upvote hơn; hầu như tất cả mọi người đều đã biết về gitk / gitg / git log --graph, nhưng những thứ đó hoàn toàn không hữu ích nếu bạn muốn hình dung cấu trúc liên kết chi nhánh và không quan tâm đến các cam kết đơn lẻ.
imolit

4
Đây chính xác là những gì tôi cần, tuyệt vời. Đó là điều duy nhất giúp tôi, trong tất cả các câu trả lời. --simplify-by-decorationlàm rõ những gì đang diễn ra
Ela782

9
Đây thực sự nên là câu trả lời. git log --graph --all --simplify-by-decorationlàm việc tốt
Irfy

Nếu chỉ chúng ta có thể sử dụng --simplify-by-decorationtrong khi thêm n cam kết trước / sau mỗi lần xác nhận đã hủy (như -B-Acho grep).
Junvar

Tôi sử dụng giải pháp này thường xuyên đến nỗi tôi có bí danh là 'cây git'.
dùng16973

76

Gitk đôi khi đau đớn cho tôi để đọc.

nhập mô tả hình ảnh ở đây

Thúc đẩy tôi viết GitVersionTree .

nhập mô tả hình ảnh ở đây


3
@exhuma Tôi có một PR với tác giả để hỗ trợ Mono (đã thử nghiệm trên Ubuntu 13.10 so với Mono 2.10)
Max Ehrlich

1
Tôi đã thấy rằng GitVersionTree giữ các nhánh ở cùng một nơi với thời gian, điều này giúp dễ dàng hơn để xem mọi thứ thay đổi như thế nào.
sfranky

48

99,999% thời gian của tôi là nhìn vào lịch sử git lgvà 0,001% làgit log .

Tôi chỉ muốn chia sẻ hai bí danh nhật ký có thể hữu ích (cấu hình từ .gitconfig):

[Alias]
     lg = log --graph --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
     hist = log --graph --full-history --all --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
  • git lg sẽ thấy lịch sử chi nhánh hiện tại.
  • git hist sẽ thấy toàn bộ lịch sử chi nhánh.

44

Hãy xem Gitkraken - GUI đa nền tảng hiển thị cấu trúc liên kết một cách sáng suốt.

Cấu trúc liên kết

Đây là một video hướng dẫn nhanh về một số tính năng nâng cao.


6
Làm thế nào để chủ đề này có GitKraken, nhưng nó không có SourceTree cũ và miễn phí? (Tôi biết, tôi biết, Atlassian không phải lúc nào cũng làm mọi thứ đúng. Nhưng SourceTree là một công cụ khá tuyệt vời để trực quan hóa.)
XML

43

Tôi thích, với git log, để làm:

 git log --graph --oneline --branches

(cũng với --all, để xem các chi nhánh từ xa)

Hoạt động với các bản phát hành Git gần đây: được giới thiệu từ 1.6.3 ( Thu, ngày 7 tháng 5 năm 2009 )

  • " --pretty=<style>" Tùy chọn để gia đình đăng nhập các lệnh có thể được đánh vần là " --format=<style>".
    Ngoài ra, --format=%formatstringlà một tay ngắn cho --pretty=tformat:%formatstring.

  • " --oneline" là từ đồng nghĩa với " --pretty=oneline --abbrev-commit".

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix
| | * 8183707 a first bug10 fix
| |/
| * e727105 a second evol for 2.0
| * 473d44e a main evol
|/
* b68c1f5 first evol, for making 1.0

Bạn cũng có thể giới hạn khoảng thời gian hiển thị nhật ký (số lần xác nhận):

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all -5
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix

(chỉ hiển thị 5 lần xác nhận gần nhất)


Điều tôi không thích về giải pháp được chọn hiện tại là:

 git log --graph

Nó hiển thị quá nhiều thông tin (khi tôi chỉ muốn xem tóm tắt nhanh):

PS D:\git\tests\finalRepo> git log --graph
* commit 4919b681db93df82ead7ba6190eca6a49a9d82e7
| Author: VonC <vonc@laposte.net>
| Date:   Sat Nov 14 13:42:20 2009 +0100
|
|     a second bug10 fix
|
* commit 3469e13f8d0fadeac5fcb6f388aca69497fd08a9
| Author: VonC <vonc@laposte.net>
| Date:   Sat Nov 14 13:41:50 2009 +0100
|
|     a first bug10 fix
|

gitk là tuyệt vời, nhưng buộc tôi phải rời phiên shell cho một cửa sổ khác, trong khi hiển thị n cam kết cuối cùng một cách nhanh chóng thường là đủ.


Tôi cũng chọn phương thức này, nhưng tôi đã tạo một bí danh để gõ "biểu đồ git" giống như thực hiện "git log --graph --decISE --oneline".
Sẽ Pike

@ConnerPike ý tưởng tốt. Bản thân tôi có bí danh 'lg': xem stackoverflow.com/a/3667139/6309
VonC

35

Gitg là một công cụ tuyệt vời cho Linux, tương tự như Gitx cho OS X. Chỉ cần chạy 'gitg' trên dòng lệnh từ đâu đó bên trong cấu trúc cây của kho lưu trữ của bạn (giống với gitx).


3
Trong rất nhiều từ: gitg có một menu thả xuống nơi người ta có thể chọn nhánh nào để trực quan hóa. Trình đơn thả xuống này cũng có tùy chọn "Tất cả".
Phluks

1
Hoặc bạn có thể bắt đầu nó với gitg --all, nếu bạn muốn tránh mucking xung quanh trong menu thả xuống.
imolit

25

Tôi thấy "git-big-hình" khá hữu ích: https://github.com/esc/git-big-picture

Nó tạo ra các biểu đồ 2D đẹp bằng cách sử dụng dot / graphviz thay vì các chế độ xem tuyến tính, "một chiều" mà gitk và bạn bè tạo ra. Với tùy chọn -i, nó hiển thị các điểm nhánh và hợp nhất các cam kết nhưng bỏ qua mọi thứ ở giữa.


khá đơn giản để sử dụng, nếu bạn không có nhiều cam kết và muốn một giải pháp đơn giản, có thể thử.
khôn ngoan 24/2/2015

Nó nên mở rộng với số lượng cam kết tốt (nếu bạn sử dụng -i), nó có thể trở nên không thể đọc được nếu bạn có các nhánh và sáp nhập phức tạp (nhưng sau đó, công cụ nào không)
Frank Osterfeld 24/2/2015

1
Với dự án quy mô trung bình của chúng tôi, điều này tạo ra một bức tranh khổng lồ với hàng tấn đường kẻ. Tôi có thể giới hạn độ sâu nó đi không? Tức là cam kết từ N ngày qua hoặc lâu hơn.
Ondra Žižka

25

Một công cụ dựa trên web tốt đẹp là vô duyên . Nó chạy trên bất kỳ nền tảng nào mà node.js & git hỗ trợ. Có một video về cách nó hoạt động cho những người tìm thấy những thứ đó dễ dàng hơn đọc ...

nhập mô tả hình ảnh ở đây


21

Hãy xem BranchMaster .

Tôi đã viết nó để hình dung cấu trúc nhánh phức tạp, bằng cách thu gọn tất cả các cam kết giữa chúng thành một dòng duy nhất. Các con số cho biết số lượng cam kết.

nhập mô tả hình ảnh ở đây


1
Đây là những gì tôi đang tìm kiếm. Có các lệnh / công cụ thay thế để làm điều này?
Aalex Gabi

3
@AalexGabi Đặt cái này vào gitconfig của bạn, nó cũng làm điều tương tự, nhưng trong dòng lệnh gbranch = log --graph --simplify-by-trang trí --pretty = format: '% C (màu vàng)% h% C (màu trắng)% d% C (đậm màu đen)% ar% C (đặt lại)% n '--all
kracejic

Làm thế nào bạn có được dữ liệu để trực quan hóa các chi nhánh?
Cá tuyết

15

Không ai nhắc đến tig ? Nó không gấp các nhánh như "BranchMaster", nhưng ...

Nó là nhanh, chạy trong thiết bị đầu cuối.

Bởi vì nó rất nhanh (+ điều khiển bàn phím) bạn có được một UX tuyệt vời, nó gần giống như "" của tôi lscho các thư mục chứa kho git.

https://jonas.github.io/tig/

Nó có các phím tắt thông thường, /để tìm kiếm, vv

Biểu đồ sửa đổi

(ps. Đây là thiết bị đầu cuối trong nền của ảnh chụp màn hình này, ngày nay nó trông đẹp hơn, nhưng máy tính của tôi từ chối chụp ảnh màn hình, xin lỗi)

(pps. Tôi cũng sử dụng gitkraken và có hình ảnh thực sự rõ ràng, nhưng nó nặng hơn nhiều tig)


Tôi là người yêu thích thiết bị đầu cuối và Tig (giao diện chế độ văn bản cho Git) là công cụ tốt để tương tác với kho Git, nó rất hữu ích bao gồm chế độ xem biểu đồ và lịch sử Git. Tôi giới thiệu nó cho những người yêu thích thiết bị đầu cuối như một công cụ bổ sung cho dòng lệnh Git.
ẩn sĩ

15

Rùa Git có một công cụ gọi là "Đồ thị sửa đổi". Nếu bạn đang ở trên Windows, thật dễ dàng như nhấp chuột phải vào repo của bạn -> Rùa Git -> Đồ thị sửa đổi.


1
Thật là một tính năng tuyệt vời, sử dụng rùa rùa trong một thời gian dài nhưng không biết tính năng này.
kreamik

Đây là cách đơn giản hơn. Cảm ơn.
Anoop


12

Tôi sử dụng các bí danh sau đây.

[alias]
    lol = log --graph --decorate --pretty=oneline --abbrev-commit
    lola = log --graph --decorate --pretty=oneline --abbrev-commit --all

Nó có nhiều thông tin trong bảng màu hơn các bí danh mà tôi thấy ở trên. Nó dường như cũng khá phổ biến, vì vậy bạn có thể có cơ hội tồn tại trong môi trường của người khác hoặc có thể đề cập đến nó trong cuộc trò chuyện mà không cần phải giải thích.

Với ảnh chụp màn hình và mô tả đầy đủ tại đây: http://blog.kfish.org/2010/04/git-lola.html


12

Đối với người dùng Mac, hãy kiểm tra (không có ý định chơi chữ) công cụ mã nguồn mở, miễn phí GitUp: http://gitup.co/

Tôi thích cách hiển thị biểu đồ, nó rõ ràng hơn một số công cụ khác mà tôi đã thấy.

Dự án ở đây: https://github.com/git-up/GitUp

Ảnh chụp màn hình GitUp


Đây là biểu đồ duy nhất mà bạn nhìn thấy các nhánh trên trục x và thời gian trên trục y. Nó rất trực quan. GitUp hoàn toàn tuyệt vời! macOS không còn nữa, vì vậy tôi đang chuyển sang Windows và sẽ rất nhớ Gitup.
w00t

11

Tôi có git logbí danh này ~/.gitconfigđể xem lịch sử biểu đồ:

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

Với bí danh tại chỗ, git lsẽ hiển thị một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây

Trong Git 2.12 +, bạn thậm chí có thể tùy chỉnh màu đường của biểu đồ bằng cách sử dụnglog.graphColors tùy chọn cấu hình.

Đối với định dạng của nhật ký, nó tương tự như --oneline, với việc thêm tên tác giả (tôn trọng .mailmap) và ngày tác giả tương đối . Lưu ý rằng %C(auto)cú pháp yêu cầu Git sử dụng màu mặc định cho hàm băm xác nhận, v.v. được hỗ trợ trong Git> = 1.8.3 .


1
Đây là lần đầu tiên tôi thấy ngày tác giả thực sự và nó khá đẹp! cảm ơn, tôi sẽ thêm nó vào gitconfig của tôi!
Simon C.

Người dùng windows nên thay thế dấu ngoặc đơn bằng dấu ngoặc kép
PierDipi

11

Tôi tìm thấy bài viết trên blog này cho thấy một cách súc tích:

git log --oneline --abbrev-commit --all --graph --decorate --color

Tôi thường tạo một bí danh cho lệnh trên:

alias gl='git log --oneline --abbrev-commit --all --graph --decorate --color'

và đơn giản chỉ cần sử dụng gl .

Bạn cũng có thể thêm bí danh vào cấu hình git. Mở ~/.gitconfigvà thêm dòng sau vào [bí danh]

[alias]
        lg = log --oneline --abbrev-commit --all --graph --decorate --color

và sử dụng nó như thế này: git lg


8

Bí danh yêu thích cá nhân của tôi, thông qua .gitconfig, là:

graph = log --graph --color --all --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"

6
Một lời giải thích nhỏ rằng lệnh sẽ trông như thế nào sẽ là tuyệt vời.
Tối đa

8

Đối với những người sử dụng trình soạn thảo văn bản VSCode , hãy xem xét Tiện ích mở rộng lịch sử Git của D. Jayamanne:

nhập mô tả hình ảnh ở đây


Phần mở rộng này hơi chậm theo ý kiến ​​của tôi. Nó cũng không tự động cập nhật và trông chưa được đánh bóng. Nhưng nó làm rất tốt việc hình dung cây cam kết ...
aljazerzen

2
Một phần mở rộng khác cho Visual Studio Code là Git Graph của mhutchie. Tôi sử dụng điều này cùng với GitLens.
Josef.B

7

Gitx cũng là một công cụ trực quan tuyệt vời nếu bạn có mặt trên OS X.


3
gitk (cho tất cả mọi người) rất giống nhau. không hoàn toàn giống nhau, nhưng khá giống nhau.
xero

Có một vài nhánh của Gitx - cái này (rowanj) dường như là tốt nhất vào lúc này.
rjmunro

7

Một lệnh git log khác. Cái này với các cột có chiều rộng cố định :

git log --graph --pretty=format:"%x09%h | %<(10,trunc)%cd |%<(25,trunc)%d | %s" --date=short


3

Trên Windows có một công cụ rất hữu ích mà bạn có thể sử dụng: git extend. Đây là một công cụ gui và làm cho hoạt động git rất dễ dàng.

Ngoài ra nó là nguồn mở.

http://gitextensions.github.io


2

Tôi đã thử --simplify-by-decorationnhưng tất cả các sự hợp nhất của tôi không được hiển thị. Vì vậy, thay vào đó tôi chỉ cắt bớt các dòng không có ký hiệu "\" và "/" ở các tiêu đề, trong khi luôn giữ các dòng bằng "(" chỉ ra các nhánh ngay sau đó. Khi hiển thị lịch sử chi nhánh, tôi thường không quan tâm đến nhận xét cam kết, vì vậy Tôi cũng loại bỏ chúng. Tôi kết thúc với bí danh shell sau đây.

gbh () { 
    git log --graph --oneline --decorate "$@" | grep '^[^0-9a-f]*[\\/][^0-9a-f]*\( [0-9a-f]\|$\)\|^[^0-9a-f]*[0-9a-f]*\ (' | sed -e 's/).*/)/'
}

2

chúng ta có thể làm cho nó phức tạp hơn?

Làm thế nào về nhật ký git đơn giản --all --decISE --oneline --graph (nhớ A Dog = - ALL --DecISE --Oneline --Graph)


1
Điều này giống như câu trả lời được chấp nhận. Tuy nhiên, đạo cụ cho việc ghi nhớ
aljeim

1

Trang web chính thức của Git đã tranh thủ một số công cụ GUI cụ thể của nền tảng bên thứ ba. Nhấn vào đây git GUI Tools cho Linux Platform

Tôi đã sử dụng gitgGitKrakencho nền tảng linux. Cả hai đều hiểu cây cam kết

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.