12/08/2018, 15:23

Các cách xem lịch sử commit trong git

Git là một công cụ tuyệt vời để quản lý các version của công việc, nếu bạn làm sai, bạn hoàn toàn có thể quay về một version trước đó, hoặc là khi làm việc trong cùng một nhóm, bạn không biết tiến độ công việc đến đâu rồi, chỉ cần mở lại lịch sử commit, và xem nội dung các commit gần đây. Để làm ...

Git là một công cụ tuyệt vời để quản lý các version của công việc, nếu bạn làm sai, bạn hoàn toàn có thể quay về một version trước đó, hoặc là khi làm việc trong cùng một nhóm, bạn không biết tiến độ công việc đến đâu rồi, chỉ cần mở lại lịch sử commit, và xem nội dung các commit gần đây. Để làm được điều này thì trước tiên bạn cần biết cách xem lịch sử commit.

Xem lịch sử commit

Dưới đây là một số lệnh để xem lịch sử commit, không phải tất cả nhưng là những lệnh khá thông dụng.

  • git log: Hiển thị danh sách commit cùng với messages, thời gian tạo commit, người tạo commit, các commit được sắp xếp theo thứ tự từ mới đến cũ.
  • git log --reverse: Hiển thị tương tự git log, nhưng thứ tự sắp xếp commit ngược lại
  • git log --oneline: Mỗi commit chỉ hiển thị một dòng, bao gồm ID commit và dòng đầu tiên của messages (cách này có vẻ dễ nhìn nhất)
0e25143 Merge branch 'feature'
ad8621a Fix a bug in the feature
16b36c6 Add a new feature
23ad9ad Add the initial code base
  • git log -p: Hiển thị chi tiết thông tin commit, bao gồm cả nội dung thay đổi (thêm/xóa dòng code nào), tuy nhiên nếu có nhiều sự thay đổi, cách này nhìn khá là dài và rườm rà
commit 16b36c697eb2d24302f89aa22d9170dfe609855b
Author: Mary <mary@example.com>
Date: Fri Jun 25 17:31:57 2014 -0500
Fix a bug in the feature
diff --git a/hello.py b/hello.py
index 18ca709..c673b40 100644
--- a/hello.py
+++ b/hello.py
@@ -13,14 +13,14 @@ B
-print("Hello, World!")
+print("Hello, Git!")
  • git log -p <filename>: Thêm vào tên file cụ thể sẽ trả về những commit thay đổi file đó, ví dụ git log -p app/models/user.rb sẽ trả về danh sách các commit có sự thay đổi file user.rb cùng với sự nội dung thay đổi, nếu bạn không quan tâm đến nội dung thay đổi, có thể bỏ -p, hoặc thay bằng --oneline để xem ngắn gọn hơn. Trong một vài trường hợp có thể nhầm lẫn giữa tên file và tên branch, nên thêm -- để tránh nhầm lẫn, ví dụ git log -p -- app/models/user.rb
  • git log -p -S <query>: -S viết tắt của search, ví dụ như khi viết git log -p -S password, sẽ trả về danh sách các commit mà trong các thay đổi về code có từ "password", tương tự có thể bỏ -p hay thêm --oneline, nhưng mình thường viết như vậy. Nếu như bạn muốn sử dụng regular expression thay vì một chuỗi, bạn có thể thay bằng -G"<regex>"
  • git log -p --grep <query>: tương tự như -S, --grep tìm kiếm những commit có messages có chứa từ trong <query>, nếu cụm từ tìm kiếm có dấu cách thì phải để trong ngoặc kép, ví dụ git log -p --grep "change password"
  • git log <since>..<until>: lấy ra danh sách các commit nằm trong một phạm vi nào đó, có thể là từ id commit này đến id commit khác ví dụ (git log 660bfa2..922b5d2), hoặc từ branch này đến branch khác (git log rails-4.1..rails-4.2), có thể sử dụng -S, p, --grep để lọc kết quả. Cách này thường được dùng khi muốn xem sự thay đổi giữa 2 branch.
  • git log --stat: hiển thị commit cùng số lượng thêm và xóa bao nhiêu dòng trong mõi file trong commit đó, cách này khá hữu ích khi muốn xem sự thay đổi trong mỗi commit một cách ngắn gọn.
commit f2a238924e89ca1d4947662928218a06d39068c3
Author: John <john@example.com>
Date: Fri Jun 25 17:30:28 2014 -0500
Add a new feature
hello.py | 105 ++++++++++++++++++++++++-----------------
1 file changed, 67 insertion(+), 38 deletions(-)

Trong ví dụ trên có thể hiểu là file hello.py đã được thay đổi 105 dòng, trong đó thêm 67 dòng, xóa 38 dòng.

  • git log --no-merges: Lịch sử commit mặc định có cả những commit merge, nếu muốn bỏ đi thì dùng --no-merges, hoặc dùng --merges cho để chỉ hiện những commit merge

Thao tác trong trang xem lịch sử commit

Trong trang kết quả, có thể di chuyển hoặc tìm kiếm bằng một số phím tắt

  • <spacebar>: nhảy tới trang tiếp theo
  • /<term>, ?<term>: tìm kiểm trong trang xem kết quả, ví dụ /password sẽ nhảy đến dòng có chứa từ khóa password và highlight kết quả
  • n: dùng cùng với / hoặc ?, để nhảy đến kết quả tìm kiếm tiếp theo
  • N: giống như n nhưng nhảy đến kết quả tìm kiếp trước đó
  • b: quay về trang trước
  • q: thoát khỏi trang kết quả Một mẹo khá hay khi xem commit là gõ /^commit, câu lệnh sẽ highlight tất cả từ commit, sau đó chỉ việc gõ n hoặc N để chuyển đến commit tiếp theo hoặc trước đó

Link tham khảo: https://www.everydayrails.com/2017/01/02/git-command-line-log-search.html https://www.atlassian.com/git/tutorials/git-log

0