Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình

Thành Thạo Git Log: Hướng Dẫn Toàn Diện Xem Và Lọc Commit

Lệnh git log hiển thị bản ghi commit trong repository Git. Mặc định, git log hiển thị hash commit, commit message và metadata commit khác. Bạn có thể lọc đầu ra git log dùng các tùy chọn khác nhau.

Hệ thống kiểm soát phiên bản có mục đích cốt lõi – ghi lại cách codebase tiến hóa theo thời gian. Điều này cho phép bạn xem dự án tiến triển như thế nào. Bạn có thể biết ai đóng góp cho dự án và xác định thay đổi gì đã làm cho mã và khi nào.

Nhưng bạn thực sự xem lịch sử repository Git tạo ra như thế nào? Đó là nơi lệnh git log hữu ích.

Hướng dẫn này thảo luận, với ví dụ, cơ bản của lệnh git log và cách dùng nó kiểm tra repository Git.

Lệnh git log

Lệnh git log hiển thị danh sách tất cả commit làm cho repository. Bạn thấy hash của mỗi Git commit, message liên kết với mỗi commit và metadata hơn. Lệnh này hữu ích để hiển thị lịch sử repository.

Trong khi lệnh git status tập trung vào thư mục làm việc hiện tại, git log cho phép bạn xem lịch sử repository.

Ví Dụ Lệnh git log

Hãy đi qua ví dụ minh họa cách lệnh git log hoạt động. Chúng ta đang làm việc trên repository gọi là "demo-repository". Bây giờ chúng ta muốn xem danh sách tất cả commit đã push đến repository. Để làm vậy, dùng lệnh:

Lệnh git log trả về danh sách tất cả commit làm trong repository. Đây là ví dụ một commit đơn lẻ trả về bởi lệnh này:

commit 43433c674e3d6c86a889fad222dae179785893cf (HEAD -> master, origin/master, origin/HEAD)
Author: James Gallagher <37276661+jamesgallagher432@users.noreply.github.com>
Date: Tue Apr 7 13:09:58 2020 +0100
Update index.html

Hãy thảo luận đầu ra từng bước. Mỗi entry trả về bởi git log chứa:

  • Hash Secure Hash Algorithm (SHA) cho commit, dùng định danh duy nhất mỗi commit trong repository. Trong ví dụ trên, đây là "43433c674e3d6c86a889fad222dae179785893cf".
  • Tác giả của commit. Trong ví dụ, là James Gallagher. Email tác giả cũng được chỉ định.
  • Ngày commit được push. Trong ví dụ, thứ Ba, 7 tháng 4.
  • Message liên kết với commit. Commit message trả về là "Update index.html".

Tất cả dữ liệu này cung cấp thông tin hữu ích về commit trong repository.

Lọc Đầu Ra Của git log

Mặc định, git log trả về danh sách tất cả commit làm cho repository dùng cấu trúc này. Như bạn tưởng tượng, nó nhanh trở nên khó đọc câu lệnh git log nếu nhiều commit cần đọc.

git log đi kèm vài cờ để lọc log. Chúng là:

Lọc Theo Mới Nhất

Nếu muốn trả về số commit cụ thể, dùng cờ -n. Ví dụ cờ này hoạt động:

Lệnh này trả về danh sách ba commit gần nhất làm cho repository.

Lọc Theo Tác Giả Hoặc Committer

Bạn cũng có thể lọc commit trả về bởi git log theo người viết hoặc commit thay đổi. Giả sử muốn xem danh sách commit push bởi "John Smith". Làm bằng lệnh:

git log --author="John Smith"
git log --committer="John smith"

Cờ author giới hạn kết quả commit mà thay đổi làm bởi John Smith. Cờ committer giới hạn kết quả commit thực sự commit bởi cá nhân đó.

Bạn sẽ thấy, hầu hết trường hợp, author và committer là cùng cá nhân. Trong dự án lớn, tác giả commit không nhất thiết là người push lên repository. Đó là lý do hai cờ này tồn tại.

Lọc Theo Ngày

Thêm vào đó, bạn lọc kết quả git log theo ngày. Làm vậy, dùng cờ --before và --after. Cả hai cờ chấp nhận nhiều định dạng ngày, nhưng hai phổ biến nhất là tham chiếu tương đối và ngày đầy đủ.

Giả sử muốn lấy danh sách commit sau 2019-3-2. Làm bằng lệnh:

git log --after="2019-3-2"

Chúng ta chỉ định ngày lọc commit. Tương tự, nếu muốn lấy danh sách commit trước hôm qua, làm bằng lệnh:

git log --before="yesterday"

Chúng ta chỉ định giá trị tương đối ("yesterday").

Bây giờ, giả sử muốn lấy danh sách commit đăng sau 2019-3-2 và trước 2019-3-19. Làm bằng lệnh:

git log --after="2019-3-2" --before="2019-3-19"

Lọc Theo File

Khi dùng lệnh git log, bạn có thể chỉ muốn xem danh sách commit ảnh hưởng đến file cụ thể. Làm vậy, chỉ định file thay đổi bạn muốn xem.

Giả sử muốn xem thay đổi làm cho file "main.py" trong code. Làm bằng lệnh sau:

Câu lệnh -- chỉ thị git log rằng đối số chỉ định là đường dẫn file không phải tên nhánh.

Trong lệnh, chúng ta chỉ chỉ định một file để lọc phản hồi git log. Nhưng nếu muốn, bạn chỉ định nhiều file.

Lọc Theo Nội Dung

Bạn cũng tìm commit đã xóa hoặc thêm dòng mã cụ thể.

Thành Thạo Git Log: Hướng Dẫn Toàn Diện Xem Và Lọc Commit

"Career Karma xuất hiện trong cuộc đời tôi khi tôi cần nó nhất và nhanh chóng giúp tôi tìm thấy bootcamp phù hợp. Hai tháng sau khi tốt nghiệp, tôi tìm được công việc mơ ước phù hợp với giá trị và mục tiêu cuộc sống!"

Venus, Kỹ sư phần mềm tại Rockbot

Tìm Bootcamp Của Bạn

Giả sử muốn tìm tất cả commit thêm thuật ngữ "# Introduction" vào code. Làm bằng lệnh:

git log -S"# Introduction"

Cờ -S dùng chỉ định thay đổi commit chúng ta tìm trong danh sách commit. Lưu ý không có khoảng trắng hoặc dấu bằng giữa cờ -S. Cũng, dấu ngoặc kép dùng chỉ định nội dung commit chúng ta tìm.

Lọc Theo Phạm Vi

Bạn dùng tham số since và until truyền phạm vi commit cho git log. Cú pháp cho tham số này như sau:

Giả sử muốn lấy danh sách commit làm kể từ commit b72beb5 push, và cho đến commit b53b22d push. Làm bằng lệnh:

Lệnh này trả về danh sách tất cả commit giữa commit b72beb5 và b53b22d.

Lọc Theo Message

Cờ --grep cho phép lọc commit trả về bởi git log theo commit message liên kết với commit cụ thể.

Ví dụ, giả sử muốn trả về danh sách tất cả commit có tên bắt đầu bằng "feat:". Làm bằng mã:

Lệnh này trả về danh sách tất cả commit có message bắt đầu bằng "feat:".

Định Dạng Đầu Ra Của git log

Phần trước, chúng ta làm việc với đầu ra đầy đủ từ git log. Đầu ra chứa SHA commit, tác giả commit, ngày push, và commit message.

Mặc dù tất cả thông tin hữu ích, thường có dịp bạn chỉ cần truy xuất dữ liệu cụ thể về commit. May mắn, git log đi kèm vài cờ để định dạng đầu ra.

Trả Về Log Rút Gọn

Mặc định, câu lệnh git log trả về entry log đầy đủ cho mỗi commit làm cho repository. Bạn truy xuất danh sách commit ID và commit message liên kết dùng cờ --oneline.

Cú pháp cho cờ --oneline:

Khi chạy trong repository từ trước, lệnh trả về:

43433c6 (HEAD -> master, origin/master, origin/HEAD) Update index.html
a7d8dc2 docs: Update README.md
b53b22d feat: Update website
3b16026 feat: Launch new homepage
b72beb5 first commit

Chúng ta thấy commit ID và dòng đầu tiên message liên kết với commit. Dễ đọc hơn tất cả metadata liên kết với commit mà git log trả về.

Mỗi entry xuất hiện trên một dòng. Kỹ thuật git log one line này tiện lợi vì hiển thị commit mà không hiển thị quá nhiều thông tin.

Trang Trí Đầu Ra

Cờ --decorate cho phép thấy tất cả tham chiếu (nhánh và tag) trỏ đến commit cụ thể. Cú pháp cờ này:

Lệnh trả về:

43433c6 (HEAD -> master, origin/master, origin/HEAD) Update index.html
a7d8dc2 docs: Update README.md
b53b22d feat: Update website
3b16026 (tag: v1) feat: Launch new homepage
b72beb5 first commit

Commit thứ tư trong danh sách bây giờ có tên tag chỉ định. Điều này vì cờ --decorate tiết lộ tham chiếu liên kết với mỗi commit trong lịch sử commit.

Trả Về Diff

Cờ --stat cho phép hiển thị số dòng mã thêm vào và xóa từ repository trong mỗi commit. Ví dụ git log --stat:

Author: James Gallagher 
Date: Mon Apr 6 09:11:46 2020 +0100
feat: Update website
index.html | 1 +
index.js | 0
2 files changed, 1 insertion(+)

Dấu cộng (+) chỉ insertion, và nếu có, dấu trừ (-) chỉ deletion. Dữ liệu này cho phép tìm hiểu thêm về thay đổi tổng thể làm cho repository.

Nếu muốn xem chính xác thay đổi làm cho repository, dùng cờ -p. Trả về diff toàn diện hơn hiển thị thay đổi trong commit.

Dưới đây là một entry trả về từ lệnh git log -p, khi chạy trên repository ví dụ:

Author: James Gallagher <37276661+jamesgallagher432@users.noreply.github.com>
Date: Tue Apr 7 13:09:58 2020 +0100
Update index.html
diff --git a/index.html b/index.html
index f45673f..2d2701d 100644
--- a/index.html
+++ b/index.html
@@ -1,2 +1,3 @@
-This is a file.
-Changes have been made.
+
+ 

This is a website.

+

Đầu ra này cho thấy cả mô tả commit và phân tích chi tiết từng thay đổi làm trong commit. Chúng ta thấy khi nào người thêm hoặc xóa nội dung từ file trong repository.

Mặc dù dữ liệu hữu ích, nó nhanh trở nên khó đọc đầu ra nếu nhiều commit hiển thị. Bạn có thể dùng một hoặc nhiều cờ khác thảo luận trong bài. Điều này giúp đảm bảo thông tin trả về bởi commit này vừa toàn diện vừa dễ đọc.

Đọc thêm về Git diff trong hướng dẫn lệnh git diff của chúng tôi.

Lệnh git shortlog

Lệnh git shortlog cung cấp tóm tắt git log. Đầu ra git shortlog nhóm theo tác giả nghĩa là bạn dễ thấy ai làm thay đổi gì cho repository.

Chạy lệnh git shortlog trên repository từ trước:

Lệnh trả về:

James Gallagher (5):
first commit
feat: Launch new homepage
feat: Update website
docs: Update README.md
Update index.html

James là người duy nhất đóng góp repository này, và ông đã làm 5 commit. Nhưng nếu có người đóng góp khác, đóng góp của họ sẽ liệt kê ở đây, cùng tổng số commit họ push lên repository.

Kết Luận

Lệnh git log cho thấy thay đổi gì làm cho repository, bởi ai, và khi nào. Bạn lọc đầu ra git log chỉ hiển thị thông tin bạn cần biết.

Lệnh git log đi kèm hai loại cờ. Một số cờ giúp định dạng đầu ra log. Cờ khác giúp lọc commit trả về bởi lệnh.

Hướng dẫn này thảo luận, tham chiếu ví dụ, cách dùng git log và cờ phổ biến nhất dùng với lệnh. Lệnh git log là công cụ quan trọng trong kho vũ khí khi làm việc với Git. Khi bạn biết dùng lệnh này hiệu quả, bạn sẽ thành thạo kiểm tra repository Git!

Để tìm hiểu thêm về Git, đọc hướng dẫn How to Learn Git của chúng tôi.