Lệnh git diff hiển thị sự khác biệt giữa file trong hai commit hoặc giữa kho hiện tại và commit trước. Lệnh hiển thị thay đổi với header và metadata cho file đã thay đổi.
Khi làm việc với Git, bạn có thể muốn so sánh dữ liệu trong kho với nguồn khác: so sánh hai commit, hai file, hoặc hai nhánh. Đó là lúc dùng diff. Diffing nhận hai đầu vào và trình bày sự khác biệt. Có thể diff trên nhánh, file, commit.
Hướng dẫn này trình bày cơ bản về diffing với Git và cách dùng git diff kèm ví dụ.
Lệnh Git Diff
Lệnh git diff hiển thị khác biệt giữa file trong hai commit hoặc giữa commit và kho hiện tại. Xem được dòng thêm, xóa, sửa trong file.
Cú pháp:
git diff
Mặc định hiển thị thay đổi chưa commit. Thường dùng so sánh nhánh.
Git Diff giữa hai Commit
So sánh file giữa hai commit bằng cách chỉ định ref (commit ID hoặc HEAD):
git diff <commit1> <commit2>
Lấy ID commit bằng git log --pretty=oneline:
5141ea9c41cdc7152408bfcab54a910f34441855 (HEAD -> master) feat: Update README.md 749055ee99df2aa6f5adc4cbe4bfc708395f1c2e docs: Create README.md
So sánh hai commit này:
git diff 5141ea9c41cdc7152408bfcab54a910f34441855 749055ee99df2aa6f5adc4cbe4bfc708395f1c2e
Git Diff giữa hai Nhánh
So sánh hai nhánh, dùng hai chấm giữa tên nhánh (chỉ lấy commit mới nhất mỗi nhánh):
git diff <nhánh1>..<nhánh2>
Ví dụ so sánh master và dev-v0.9:
git diff master dev-v0.9
So sánh file cụ thể giữa hai nhánh (ví dụ README.md):
git diff master dev-v0.9 ./README.md
Ví dụ Git Diff
Khởi tạo kho rỗng, tạo file README.md nội dung: "This is an example of the Git diff feature." Commit:
git commit
Kết quả: [master (root-commit) 749055e] docs: Create README.md 1 file changed, 1 insertion(+) create mode 100644 README.md
Lúc này git diff không ra gì vì chưa có thay đổi. Thêm dòng: "We just added this line to our file." vào README.md:
echo "We just added this line to our file." >> README.md
Chạy git diff:
diff --git a/README.md b/README.md index f808522..f08e544 100644 --- a/README.md +++ b/README.md @@ -1 +1,2 @@ This is an example of the Git diff feature. +We have just added this line to our file.
Kết quả dạng diff kết hợp: dấu + là dòng thêm, - là dòng xóa.
Để diff file cụ thể: git diff README.md.
Phân tích kết quả Git Diff
File đầu vào (Input Files)
Dòng đầu cho biết file nào đang so sánh:
diff --git a/README.md b/README.md
Metadata
Metadata kho Git, ít khi dùng trực tiếp:
index f808522..f08e544 100644
Đánh dấu thay đổi (Change Markers)
--- a/README.md +++ b/README.md
Dấu -: thay đổi từ file a. Dấu +: phản ánh trong file b.
Thay đổi code (Code Changes)
@@ -1 +1,2 @@ This is an example of the Git diff feature. +We have just added this line to our file.
Dòng đầu tóm tắt: thêm 1 dòng (+1) bắt đầu dòng 2. Dòng có dấu + là nội dung thêm.
Kết luận
Diffing cho phép so sánh file, nhánh, commit trong Git, xem thay đổi từ một thời điểm. Hướng dẫn đã trình bày cơ bản và cách dùng git diff. Bạn đã sẵn sàng dùng git diff như chuyên gia!