Lưu thay đổi vào kho Git không đơn giản chỉ là lưu file. Hệ thống kiểm soát phiên bản Git dùng phương pháp phức tạp hơn để theo dõi thay đổi, cho phép lập trình viên có kiểm soát chi tiết hơn đối với thay đổi họ làm cho mã trong kho.
Lệnh git commit là một bước trong việc "lưu" thay đổi làm cho dự án vào kho. Hàm dòng lệnh git add đầu tiên được dùng để tạo bản ghi các thay đổi sẽ được lưu trong commit, sau đó git commit được dùng để tạo commit với những thay đổi đó. Cuối cùng, git push được dùng để đẩy commit vào kho trung tâm.
Trong hướng dẫn này, chúng ta sẽ khám phá, với ví dụ, cách dùng lệnh git commit để tạo commit với Git. Sau khi đọc hướng dẫn này, bạn sẽ thành thạo việc tạo commit dùng git commit.
Git Commits (Các Commit Git)
Commit là phần quan trọng của hệ thống kiểm soát phiên bản Git.
Một cách nghĩ về commit là chúng là ảnh chụp nhanh (snapshot) của dự án trong một khoảnh khắc nhất định trong lịch sử dự án. Khi commit được tạo, nó tạo bản ghi về cách tất cả file và thư mục xuất hiện trong dự án tại thời điểm commit được tạo.
Bản ghi này sau đó có thể đọc trong tương lai để xem dự án trông như thế nào tại một thời điểm và ai làm thay đổi gì cho file nào trong dự án. Thật vậy, commit là tính năng quan trọng của Git vì nó cho phép lập trình viên giữ bản ghi toàn diện về cách kho của họ phát triển theo thời gian.
Khác với các hệ thống kiểm soát phiên bản khác, commit không ảnh hưởng đến kho trung tâm cho đến khi bạn sẵn sàng, nghĩa là nó có thể đóng vai trò như khoảng trống giữa thay đổi làm cho kho và phiên bản chính của repo.
Nói cách khác, thay vì phải làm thay đổi trực tiếp cho phiên bản chính của repo — có thể có nhiều người đóng góp đang chủ động theo dõi repo — một lập trình viên có thể commit mã của họ trong repo cục bộ và đẩy nó lên kho chính sau.
Tạo commit là giai đoạn倒数第二 của "lưu" thay đổi trong Git. Sau khi bạn tạo commit, bước tiếp theo là dùng git push để đẩy thay đổi bạn đã làm vào kho trung tâm.
Cách Dùng Git Commit
Lệnh git commit lưu tất cả thay đổi đã chuẩn bị (staged) vào kho cục bộ.
"Thay đổi đã chuẩn bị" (Staged changes) tham chiếu đến tất cả file trong khu vực chuẩn bị (staging area), được thêm bằng lệnh git add. Để tìm hiểu thêm về lệnh git add, bạn có thể đọc hướng dẫn người mới bắt đầu về git add.
Hãy khám phá cách dùng lệnh git commit.
git commit
Cách dùng cơ bản nhất của lệnh git commit như sau:
git commit
Lệnh này commit các thay đổi đã chuẩn bị vào kho cục bộ. Khi lệnh này chạy, trình soạn thảo văn bản sẽ mở yêu cầu bạn gửi thông điệp commit.
Thông điệp này là nơi bạn nên mô tả ngắn gọn các thay đổi bạn đã làm cho kho trong commit. Sau khi viết thông điệp commit, bạn có thể đóng trình soạn thảo và commit sẽ được tạo.
git commit -a
Cờ -a, viết tắt của all (tất cả), cho phép bạn tự động chuẩn bị tất cả file đã sửa đổi để commit.
Giả sử bạn có file gọi là CONTRIBUTORS.md mà bạn đã commit vào kho. Nếu bạn thay đổi file này, bạn có thể dùng lệnh git commit -a để chuẩn bị và thêm thay đổi vào kho.
Dùng cờ -a cho phép bạn bỏ qua chạy "git add" trên tất cả file thay đổi. Điều này là vì cờ -a chỉ thị git chuẩn bị tất cả file đã sửa đổi. Tuy nhiên, cờ -a sẽ không chuẩn bị file mới. Vì vậy, nếu bạn tạo file gọi là "README.md", nó sẽ không được chuẩn bị trừ khi bạn chạy "git add" trước.
Đây là cú pháp cho cờ -a:
git commit -a
Lệnh này sẽ tự động chuẩn bị tất cả file đã sửa đổi để commit trong kho của chúng ta.
git commit -m
Có lẽ cờ phổ biến nhất dùng với git commit là cờ -m. Cờ -m, viết tắt của message (thông điệp), được dùng để thêm thông điệp commit vào commit.
Khi bạn dùng lệnh git commit không có cờ -m, trình soạn thảo văn bản sẽ mở để bạn viết thông điệp, như chúng ta thảo luận trước. Tuy nhiên, dùng cờ -m cho phép bạn bỏ qua việc mở trình soạn thảo bằng cách trực tiếp chỉ định thông điệp commit.
Đây là cú pháp dùng lệnh git commit với cờ -m:
git commit -m "feat: commit message"
Trong lệnh này, chúng ta chỉ định cờ -m để chỉ ra chúng ta muốn thêm thông điệp commit trực tiếp vào commit (thay vì mở trình soạn thảo thêm thông điệp). Sau đó, chúng ta bao quanh thông điệp commit trong dấu ngoặc kép theo sau cờ -m. Trong trường hợp này, thông điệp commit là "feat: commit message".
Ví dụ Git Commit
Hãy đi qua một ví dụ để minh họa cách bạn có thể dùng lệnh git commit.
Giả sử chúng ta đang làm việc trên dự án và vừa chỉnh sửa file app.py trong dự án. Chúng ta đã làm tất cả thay đổi muốn làm cho file, và sẵn sàng tạo commit cho file.
Bước đầu tiên là thêm file vào khu vực chuẩn bị dùng git add. Bạn có thể làm như sau:
git add app.py
Bây giờ file app.py ở trong khu vực chuẩn bị. Điều này có nghĩa là chúng ta có thể commit nó vào mã khi sẵn sàng.
Chúng ta đã thêm hàm mới gọi là "runApp()" trong file app.py, mà chúng ta muốn commit vào kho cục bộ. Chúng ta có thể làm như sau:
git commit -m "feat: Add runApp() function"
Lệnh này tạo commit với thay đổi làm cho file app.py. Thông điệp liên kết với commit là "feat: Add runApp() function", mô tả ngắn gọn thay đổi chúng ta làm cho kho.
Sửa đổi (Amend) Git Commit
Lệnh git commit cũng cho phép commit trước đó được sửa đổi. Bạn có thể sửa commit trước dùng tùy chọn --amend.
Giả sử chúng ta vừa tạo commit và quên thêm file __init__.py vào commit. Chúng ta có thể sửa commit ban đầu để file được bao gồm dùng mã này:
git add __init__.py git commit --amend -m "feat: Add runApp() function and update init file"
Điều này sẽ sửa commit trước để bao gồm file __init__.py, và sẽ sửa commit dùng thông điệp commit mới chúng ta chỉ định trong lệnh trên.
Cờ --amend thường được lập trình viên phần mềm dùng vì dễ mắc lỗi khi bạn đang phiên bản phần mềm. Ví dụ, bạn có thể quên chuẩn bị file cho commit, hoặc lỡ gõ sai khi viết thông điệp commit, hoặc thông điệp commit có thể không bao gồm thay đổi lớn bạn làm cho mã.
Vì vậy, bạn có thể sẽ thường dùng cờ --amend khi phát triển phần mềm.
Viết Thông điệp Commit Tốt
Như chúng ta đã thảo luận, viết thông điệp commit là bắt buộc khi dùng lệnh git. Mặc dù thông điệp commit kỹ thuật có thể bao gồm bất cứ thứ gì bạn muốn, bạn nên dành thời gian suy nghĩ về gì bạn muốn bao gồm trong thông điệp commit.
Mặc dù không có quy tắc cách viết thông điệp commit tốt, có vài thực hành tốt thường được lập trình viên dùng để đảm bảo họ viết thông điệp commit nhất quán và mô tả.
Dưới đây là vài điều bạn nên nhớ khi viết thông điệp git commit:
- Viết hoa dòng chủ đề (subject line) của thông điệp commit
- Giới hạn dòng chủ đề ở 50 ký tự
- Dùng phần thân (body) của commit để giải thích bạn đã thay đổi gì (thay vì tại sao)
- Giữ mỗi dòng trong phần thân commit dưới 72 ký tự.
Tuân thủ các quy tắc này sẽ cho phép bạn viết thông điệp commit dễ đọc hơn, dễ hiểu hơn.
Ngoài ra, bạn có thể muốn tham chiếu đến issue hoặc pull request khác trong thông điệp commit. Ví dụ, nếu commit giải quyết issue #22 trong kho, bạn có thể đặt tiêu đề commit "fix: resolves issue #22" và bao gồm mô tả trong phần thân commit về gì bạn thay đổi để giải quyết issue.
Kết luận
Lệnh git commit được dùng để di chuyển file từ khu vực chuẩn bị vào commit. Lệnh này chạy sau git add, dùng để thêm file vào khu vực chuẩn bị. git commit tạo ảnh chụp nhanh các thay đổi làm cho kho Git sau đó có thể đẩy lên kho chính khi nhà phát triển sẵn sàng.
Hướng dẫn này thảo luận cách dùng lệnh git commit để commit thay đổi vào kho Git. Bây giờ bạn đã được trang bị kiến thức cần thiết để bắt đầu dùng lệnh git commit như chuyên gia!