Làm web (06) - Git: xem lịch sử commit

Bài học trước: Làm web (05) - Git: thao tác với kho chứa (tiếp)
-----

3.3        Xem lịch sử commit

3.3.1     Git log


Đọc thêm ở đây (tiếng Anh):


Đọc thêm ở đây (tiếng Việt):


Xem clip (tiếng Việt):


Sau khi thực hiện nhiều commit hoặc lấy một kho chứa (clone) từ trên mạng về. Để xem những gì đã xảy ra, sử dụng lệnh git log.

Có thể sử dụng kho chứa đơn giản sau để chạy các ví dụ minh họa,

$ git clone https://github.com/legiacong/langbiang.git

Chạy lệnh git log để xem kết quả (lưu ý kết quả hiển thị có thể thay đổi),

$ git log
commit 0cf8354bcbd0ad93ebf5bf336f3e49a47a00d8f4 (HEAD -> master, origin/master, origin/HEAD)
Author: Lê Gia Công <legiacong@gmail.com>
Date:   Wed Mar 6 15:47:47 2019 +0700

    doi ten tap tin

commit a6c7b4268d5c421c6fe1b6e444bcff8abeb89c19
Author: Lê Gia Công <legiacong@gmail.com>
Date:   Wed Mar 6 15:45:27 2019 +0700

    doi ten

commit fa9d0684fe9914399e4fe75e1b996df3049176cd
Author: Lê Gia Công <legiacong@gmail.com>
Date:   Wed Mar 6 14:25:30 2019 +0700

    xóa log

commit 0918f5bf74cb0b08abb2e4aea3bfa84ae8b1eea5
Author: Lê Gia Công <legiacong@gmail.com>
Date:   Wed Mar 6 14:23:28 2019 +0700
:

(bấm Enter để xem các nội dung còn lại, bấm q để thoát)

Mặc định, khi không có tham số, lệnh git log sẽ liệt kê các commit của kho chứa theo thứ tự thời gian, từ mới nhất đến cũ hơn. Thông tin của mỗi commit gồm: mã băm SHA-1, tên người commit, địa chỉ email, ngày commit và thông điệp đi kèm.

Lệnh git log có nhiều tham số đi kèm, giúp quan sát thông tin theo nhiều tiêu chí khác nhau. Phần sau sẽ tìm hiểu một số trường hợp hay sử dụng.

Tham số -p sẽ hiển thị diff của từng commit, sử dụng thêm tham số -2 để chỉ hiển thị 2 commit gần nhất.

$ git log -p -2
commit 0cf8354bcbd0ad93ebf5bf336f3e49a47a00d8f4 (HEAD -> master, origin/master, origin/HEAD)
Author: Lê Gia Công <legiacong@gmail.com>
Date:   Wed Mar 6 15:47:47 2019 +0700

    doi ten tap tin

diff --git a/taptin1.doc b/taptin2.doc
similarity index 100%
rename from taptin1.doc
rename to taptin2.doc
C:\Users\Maxsys\AppData\Local\Temp/9Gifna_taptin1.doc is not a Word Document.
C:\Users\Maxsys\AppData\Local\Temp/OZlbYa_taptin2.doc is not a Word Document.

commit a6c7b4268d5c421c6fe1b6e444bcff8abeb89c19
Author: Lê Gia Công <legiacong@gmail.com>
Date:   Wed Mar 6 15:45:27 2019 +0700

    doi ten

diff --git a/abc/New Text Document.txt b/abcd/New Text Document.txt
similarity index 100%
rename from abc/New Text Document.txt
rename to abcd/New Text Document.txt

Nhờ tham số diff, giúp bạn xem lướt qua các thay đổi đã được thực hiện trên kho chứa, ai đã thực hiện, thực hiện vào thời gian nào.

Đối với văn bản lớn, có thể sử dụng thêm tham số --word-diff để xem thông tin một cách tổng quát.

Ví dụ,

$ git log -p -2 --word-diff

Để xem thống kê tóm tắt, sử dụng tham số --stat.

Ví dụ,

$ git log --stat

Để xem hiển thị theo nhiều cách khác nhau, sử dụng tham số --pretty.

Ví dụ hiển thị mỗi commit trên một dòng,

$ git log --pretty=oneline

Để định dạng hiển thị từng thông tin, sử dụng tham số --pretty=format.

Ví dụ,

$ git log --pretty=format:"%h - %an, %ar : %s"
0cf8354 - Lê Gia Công, 17 hours ago : doi ten tap tin
a6c7b42 - Lê Gia Công, 17 hours ago : doi ten
fa9d068 - Lê Gia Công, 18 hours ago : xóa log
0918f5b - Lê Gia Công, 18 hours ago : them thu muc log
c0b9a94 - Lê Gia Công, 18 hours ago : them thu muc log
79e4308 - Lê Gia Công, 19 hours ago : da xoa thumuc
f195a19 - Lê Gia Công, 19 hours ago : them thumuc

Bảng sau là một số giá trị của tham số format,

%H: mã băm commit
%h: mã băm commit rút gọn
%T: băm hiển thị dạng cây
%t: băm hiển thị dạng cây rút gọn
%P: các mã băm gốc
%p: các mã băm gốc rút gọn
%an: tên tác giả
%ae: email tác giả
%ad: ngày commit của tác giả
%ar: thời gian đã commit của tác giả (tính đến hiện tại)
%cn: tên người commit
%ce: email người commit
%cd: ngày commit
%cr: thời gian đã commit (tính đến hiện tại)
%s: thông điệp gửi kèm commit


Tác giả (author) là người tạo ra bản vá (patch) đầu tiên, người commit là người cuối cùng áp dụng bản vá đó.

Để hiện thị các nhánh và lịch sử tích hợp, sử dụng thêm tham số --graph kết hợp với oneline hoặc format. Ví dụ,

$ git log --pretty=format:"%h %s" --graph

Bảng sau tổng hợp một số kiểu định dạng xuất hữu ích của git log,

Tùy chọn
Mô tả
-p
Hiển thị bản vá của mỗi commit
--word-diff
Hiển thị bản vá ở định dạng rút gọn
--stat
Hiển thị thống kê của các tập tin được chỉnh sửa trong mỗi commit
--shortstat
Hiển thị ngắn gọn thống kê của các tập tin được chỉnh sửa trong mỗi commit
--name-only
Hiển thị danh sách các tập tin bị thay đổi (sau thông tin commit)
--name-status
Hiển thị danh sách các tập tin bị ảnh hưởng như thêm/sửa/xóa thông tin
--abbrev-commit
Hiển thị mã băm (SHA-1) ở dạng rút gọn
--relative-date
Hiển thị khoảng thời gian từ lúc commit đến thời điểm hiện tại
--graph
Hiển thị thông tin về rẽ nhánh, trộn nhánh và các thông tin khác
--pretty
Hiển thị thông tin theo định dạng tùy chỉnh (oneline, full, fuller, format)
--oneline
Dạng rút gọn của --pretty=oneline --abbrev-commit

Lab 16. Các chế độ xem lịch sử commit.

Sử dụng repo sau,


Thực hiện xem lịch sử commit với các tham số sau, ghi lại kết quả của mỗi trường hợp.

Lệnh
Tham số
Tham số phụ
$ git log


$ git log
-p
-2
$ git log
-p
-2 --word-diff
$ git log
-- stat

$ git log
-- pretty=oneline
-- pretty=short
-- pretty=full
-- pretty=fuller

$ git log
--shortstat

$ git log
--name-only

$ git log
--name-status

$ git log
--abbrev-commit

$ git log
--relative-date


3.3.2     Giới hạn thông tin xuất


Mặc định, lệnh git log sẽ xuất thông tin của các commit theo từng trang, theo thứ tự từ mới nhất đến cũ hơn. Ngoài ra, bạn cũng có thể sử dụng thêm các tham số khác, để giới hạn các commit được hiển thị.

Sử dụng tham số -n, với n là một số tự nhiên, để xác định số commit được hiển thị.

Ví dụ sau sẽ hiển thị 3 commit mới nhất,

$ git log -3

Sử dụng tham số --since hoặc --until để hiển thị các commit trong một khoảng thời gian cụ thể.

Ví dụ sau sẽ hiển thị các commit trong 2 ngày gần nhất (tính từ thời điểm hiện tại),

$ git log --since=2.days

Ví dụ sau sẽ hiển thị các commit cho tới ngày 8 tháng 3 năm 2019,

$ git log --until="2019-3-8"

Bảng dưới đây tổng hợp một vài tham số để tiện sử dụng,

Tham số
Mô tả
- (n)
Hiển thị n commit mới nhất
--since, --after
Chỉ hiển thị các commit được thực hiện sau ngày cụ thể
--until, --before
Chỉ hiển thị các commit được thực hiện trước ngày cụ thể
--author
Hiển thị các commit theo tên tác giả
--commiter
Hiển thị các commit theo tên người commit
--grep
Hiển thị các commit dựa vào nội dung thông điệp khi commit (message)
Ví dụ: git log --grep="ten"
-S
Hiển thị các commit dựa vào nội dung đã bị thay đổi (thêm/xóa) trong các tập tin
Ví dụ: $ git log -Sword

Lab 17. Lọc các commit theo yêu cầu.

Sử dụng repo sau,


Thực hiện lọc các commit theo các yêu cầu sau, ghi lại thông tin kết quả.

Tham số
Lệnh & Kết quả
- (n)

--since, --after

--until, --before

--author

--commiter

--grep

-S



Khi cài đặt Git, sẽ có sẵn một chương trình cho phép bạn quan sát lịch sử commit một cách trực quan bằng giao diện đồ họa. Trong cửa sổ Git Bash, gõ lệnh gitk để trải nghiệm.

</////06
-----------
Cập nhật [08/10/2019]
-----------
Xem thêm: Tổng hợp các bài viết về Làm web
Xem thêm: Làm web (07) - Git: hủy bỏ & remote repo