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

Nhật ký Git chính:Hướng dẫn toàn diện về xem và lọc các cam kết

Lệnh git log hiển thị bản ghi các lần xác nhận trong kho Git. Theo mặc định, lệnh git log hiển thị hàm băm cam kết, thông báo cam kết và siêu dữ liệu cam kết khác. Bạn có thể lọc đầu ra của git log bằng nhiều tùy chọn khác nhau.

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

Nhưng làm thế nào để bạn thực sự xem lịch sử mà kho lưu trữ Git của bạn tạo ra? Đó là lúc lệnh git log có thể hữu ích.

Hướng dẫn này sẽ thảo luận, kèm theo các ví dụ, những kiến thức cơ bản về lệnh git log và cách bạn có thể sử dụng lệnh này để kiểm tra kho lưu trữ Git.

Lệnh git log

Lệnh git log hiển thị danh sách tất cả các cam kết được thực hiện đối với kho lưu trữ. Bạn có thể xem hàm băm của từng cam kết Git, thông báo được liên kết với từng cam kết và nhiều siêu dữ liệu khác. Lệnh này hữu ích để hiển thị lịch sử của kho lưu trữ.

Trong khi lệnh git status tập trung vào thư mục làm việc hiện tại thì git log cho phép bạn xem lịch sử kho lưu trữ của mình.

Ví dụ lệnh git log

Hãy xem qua một ví dụ để minh họa cách hoạt động của lệnh git log. Chúng tôi đang làm việc trên một kho lưu trữ có tên là “kho lưu trữ demo”. Bây giờ chúng tôi muốn xem danh sách tất cả các cam kết mà chúng tôi đã đẩy vào kho lưu trữ của mình. Để làm như vậy, chúng ta có thể sử dụng lệnh này:

Lệnh git log trả về danh sách tất cả các cam kết được thực hiện trong kho lưu trữ. Đây là ví dụ về một cam kết được 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 từng bước về kết quả này. Mỗi mục được trả về bởi lệnh git log chứa:

  • Băm thuật toán băm an toàn (SHA) cho cam kết, được sử dụng để nhận dạng duy nhất từng cam kết trong kho lưu trữ. Trong ví dụ trên của chúng tôi, đây là “43433c674e3d6c86a889fad222dae179785893cf”.
  • Tác giả của cam kết. Trong ví dụ trên của chúng tôi, đây là James Gallagher. Email của tác giả cũng được chỉ định.
  • Ngày cam kết được đẩy. Trong ví dụ trên của chúng tôi, hôm nay là Thứ Ba, ngày 7 tháng 4.
  • Thông báo liên quan đến cam kết. Thông báo cam kết được trả về ở trên là “Cập nhật chỉ mục.html”.

Tất cả dữ liệu này cung cấp cho chúng tôi thông tin hữu ích về các cam kết trong kho lưu trữ của chúng tôi.

Lọc đầu ra của git log

Theo mặc định, git log trả về danh sách tất cả các cam kết được thực hiện đối với kho lưu trữ bằng cấu trúc này. Như bạn có thể tưởng tượng, việc đọc các câu lệnh nhật ký git của bạn có thể nhanh chóng trở nên khó khăn nếu có nhiều cam kết cần đọc.

git log đi kèm với một số cờ mà bạn có thể sử dụng để lọc nhật ký của mình. Đó là:

Lọc theo Gần đây nhất

Nếu bạn muốn trả về một số lần xác nhận cụ thể, bạn có thể thực hiện bằng cách sử dụng cờ -n. Dưới đây là ví dụ về hoạt động của cờ này:

Lệnh này trả về danh sách ba cam kết gần đây nhất được thực hiện cho một kho lưu trữ.

Lọc theo tác giả hoặc người ủy quyền

Bạn cũng có thể lọc các cam kết được trả về bởi git log bởi người đã viết hoặc thực hiện các thay đổi. Giả sử chúng ta muốn xem danh sách các cam kết được đưa ra bởi “John Smith”. Chúng ta có thể làm như vậy bằng cách sử dụng các lệnh sau:

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

Cờ tác giả giới hạn kết quả ở những cam kết có những thay đổi do John Smith thực hiện. Cờ người cam kết giới hạn kết quả đối với những lần cam kết thực sự được thực hiện bởi cá nhân đó.

Bạn sẽ thấy rằng, trong hầu hết các trường hợp, tác giả và người viết là cùng một cá nhân. Trong các dự án lớn hơn, tác giả của một cam kết có thể không nhất thiết phải là người đẩy nó vào kho lưu trữ. Đây là lý do tại sao hai lá cờ này tồn tại.

Lọc theo ngày

Ngoài ra, bạn có thể lọc kết quả của git log theo ngày. Để làm như vậy, bạn có thể sử dụng cờ—trước và—sau. Cả hai cờ này đều chấp nhận nhiều định dạng ngày khác nhau, nhưng hai loại được sử dụng phổ biến nhất là tham chiếu tương đối và ngày đầy đủ.

Giả sử chúng ta muốn truy xuất danh sách các cam kết từ sau ngày 2-3-2019. Chúng ta có thể làm như vậy bằng lệnh này:

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

Chúng tôi đã chỉ định một ngày để lọc các cam kết của mình. Tương tự, nếu muốn truy xuất danh sách các lần xác nhận từ trước ngày hôm qua, chúng ta có thể thực hiện bằng lệnh này:

git log --before="yesterday"

Chúng tôi đã chỉ định một giá trị tương đối (“ngày hôm qua”).

Bây giờ, giả sử chúng ta muốn truy xuất danh sách các cam kết đã được xuất bản sau ngày 2/3/2019 và trước ngày 19/3/2019. Chúng ta có thể làm như vậy bằng lệnh này:

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

Lọc theo tệp

Khi sử dụng lệnh git log, bạn có thể chỉ muốn xem danh sách các cam kết đã ảnh hưởng đến một tệp cụ thể. Để làm như vậy, bạn có thể chỉ định tệp có những thay đổi mà bạn muốn xem.

Giả sử chúng ta muốn xem những thay đổi được thực hiện đối với tệp “main.py” trong mã của mình. Chúng ta có thể làm như vậy bằng lệnh sau:

Câu lệnh — hướng dẫn lệnh git log rằng các đối số chúng ta đã chỉ định là đường dẫn tệp chứ không phải tên của các nhánh.

Trong lệnh của chúng tôi, chúng tôi chỉ chỉ định một tệp mà chúng tôi muốn sử dụng để lọc phản hồi của lệnh git log. Tuy nhiên, nếu muốn, bạn có thể chỉ định nhiều tệp.

Lọc theo nội dung

Bạn cũng có thể tìm kiếm các cam kết đã xóa hoặc thêm một dòng mã cụ thể.

Nhật ký Git chính:Hướng dẫn toàn diện về xem và lọc các cam kết

"Nghề nghiệp đã bước vào cuộc đời tôi khi tôi cần nó nhất và nhanh chóng giúp tôi tham gia chương trình đào tạo. 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 các giá trị và mục tiêu trong cuộc sống của mình!"

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

Tìm trận đấu Bootcamp của bạn

Giả sử chúng ta muốn tìm kiếm tất cả các cam kết đã thêm cụm từ “#Giới thiệu” vào mã của chúng ta. Chúng ta có thể làm như vậy bằng lệnh này:

git log -S"# Introduction"

Cờ -S được sử dụng để chỉ định thay đổi cam kết nào mà chúng tôi muốn tìm kiếm trong danh sách các cam kết của mình. Lưu ý rằng không có dấu cách hoặc dấu bằng giữa cờ -S. Ngoài ra, dấu ngoặc kép mà chúng tôi sử dụng để chỉ định nội dung của cam kết mà chúng tôi đang tìm kiếm.

Lọc theo phạm vi

Bạn có thể sử dụng các tham số từ và cho đến khi chuyển một loạt các cam kết tới nhật ký git. Cú pháp của các tham số này như sau:

Giả sử chúng ta muốn truy xuất danh sách các cam kết được thực hiện kể từ khi cam kết b72beb5 được đẩy và cho đến khi cam kết b53b22d được đẩy. Chúng ta có thể làm như vậy bằng lệnh này:

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

Lọc theo tin nhắn

Cờ –grep cho phép bạn lọc các cam kết được trả về bởi git log theo thông báo cam kết liên quan đến một cam kết cụ thể.

Ví dụ:giả sử chúng ta muốn trả về danh sách tất cả các cam kết có tên bắt đầu bằng “feat:”. Chúng ta có thể làm như vậy bằng cách sử dụng mã này:

Lệnh này trả về danh sách tất cả các lần xác nhận có thông báo bắt đầu bằng “feat:”.

Định dạng đầu ra của git log

Trong phần trước, chúng ta đã làm việc với đầu ra đầy đủ từ lệnh git log. Kết quả đầu ra này chứa SHA cho cam kết của chúng tôi, tác giả cam kết, ngày thực hiện cam kết và thông báo cam kết.

Mặc dù tất cả thông tin này đều hữu ích nhưng thường có những trường hợp bạn chỉ cần truy xuất dữ liệu cụ thể về một cam kết. May mắn thay, lệnh git log đi kèm với một số cờ mà bạn có thể sử dụng để định dạng đầu ra của lệnh.

Trả lại nhật ký tóm tắt

Theo mặc định, câu lệnh git log trả về một mục nhật ký đầy đủ cho mỗi cam kết được thực hiện đối với một kho lưu trữ. Bạn có thể truy xuất danh sách ID cam kết và thông báo cam kết liên quan của chúng bằng cờ –oneline.

Đây là cú pháp của cờ –oneline:

Khi chạy trong kho lưu trữ của chúng tôi từ trước đó, lệnh này sẽ 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 có thể thấy ID cam kết và dòng đầu tiên của thông báo được liên kết với một cam kết. Điều này dễ đọc hơn tất cả siêu dữ liệu được liên kết với một cam kết mà lệnh git log sẽ trả về nếu không.

Mỗi mục xuất hiện trên một dòng duy nhất. Kỹ thuật một dòng git log này rất tiện dụng vì nó hiển thị các cam kết mà không hiển thị quá nhiều thông tin.

Trang trí đầu ra

Cờ –trang trí cho phép bạn xem tất cả các tham chiếu (tức là các nhánh và thẻ) trỏ đến một cam kết cụ thể. Đây là cú pháp cho cờ này:

Lệnh này 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

Cam kết thứ tư trong danh sách của chúng tôi hiện có tên thẻ được chỉ định. Điều này là do cờ –trang trí hiển thị các tham chiếu được liên kết với từng cam kết trong lịch sử cam kết của chúng tôi.

Trả về một điểm khác biệt

Cờ –stat cho phép bạn hiển thị số dòng mã được thêm vào và xóa khỏi kho lưu trữ trong mỗi lần xác nhận. Đây là một ví dụ về lệnh git log –stat đang hoạt động:

Author: James Gallagher <james@users.noreply.github.com>
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 (+) biểu thị phần chèn thêm và nếu có, dấu trừ (-) sẽ biểu thị phần xóa. Dữ liệu này cho phép bạn tìm hiểu thêm về những thay đổi tổng thể được thực hiện đối với kho lưu trữ.

Nếu bạn muốn xem những thay đổi chính xác được thực hiện đối với kho lưu trữ, bạn có thể sử dụng cờ -p. Điều này trả về một khác biệt toàn diện hơn hiển thị những thay đổi được thực hiện trong một cam kết.

Đây là một mục được trả về từ lệnh git log -p khi chạy trên kho lưu trữ mẫu của chúng tôi:

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.
+<body>
+ <p>This is a website.</p>
+</body>

Đầu ra này hiển thị cho chúng ta cả mô tả về cam kết và phân tích chi tiết về từng thay đổi được thực hiện trong cam kết. Chúng tôi có thể biết khi nào mọi người đã thêm hoặc xóa nội dung khỏi các tệp trong kho lưu trữ của chúng tôi.

Mặc dù dữ liệu này hữu ích nhưng việc đọc kết quả đầu ra này có thể nhanh chóng trở nên khó khăn nếu có nhiều cam kết hiển thị. Bạn có thể muốn sử dụng một hoặc nhiều cờ khác mà chúng tôi đã thảo luận trong bài viết này. Điều này sẽ giúp đảm bảo thông tin được cam kết này trả về vừa toàn diện vừa dễ đọc.

Bạn có thể đọc thêm về Git diffs 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 bản tóm tắt về nhật ký git. Đầu ra của lệnh git shortlog được nhóm theo tác giả, nghĩa là bạn có thể dễ dàng biết ai đã thực hiện những thay đổi nào đối với kho lưu trữ.

Hãy chạy lệnh git shortlog trên kho lưu trữ của chúng tôi từ trước:

Lệnh của chúng tôi 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 cho kho lưu trữ này và anh ấy đã thực hiện năm cam kết. Tuy nhiên, nếu có những người đóng góp khác, những đóng góp của họ sẽ được liệt kê ở đây, cùng với tổng số lần cam kết mà họ đã đẩy vào kho lưu trữ.

Kết luận

Lệnh git log cho bạn biết những thay đổi nào đã được thực hiện đối với kho lưu trữ, ai thực hiện và khi nào. Bạn có thể lọc đầu ra của git log để chỉ hiển thị thông tin bạn cần biết.

Lệnh git log đi kèm với hai loại cờ. Một số cờ giúp bạn định dạng đầu ra của nhật ký. Các cờ khác có thể giúp bạn lọc các xác nhận được lệnh trả về.

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

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