Git commit là gì? Các tuỳ chọn phổ biến của git commit

Trong hệ thống quản lý phiên bản Git, git commit đóng vai trò quan trọng trong việc lưu trữ các bản chụp của dự án, đánh dấu những thay đổi đã thực hiện. Đây không chỉ là một lệnh đơn giản để lưu trữ mà còn là cầu nối chính giữa các thay đổi cụ thể và lịch sử phát triển của dự án. Bài viết này sẽ khám phá chi tiết về git commit, đồng thời tập trung vào các tuỳ chọn phổ biến mà người phát triển thường xuyên sử dụng để điều chỉnh quá trình commit trong quá trình làm việc hàng ngày.

Git commit là gì?

Lệnh git commit chụp lại một bản chụp của các thay đổi hiện tại được đặt trên dự án. Bản chụp đã commit có thể được xem như là phiên bản "an toàn" của dự án—Git sẽ không bao giờ thay đổi chúng trừ khi bạn yêu cầu nó cụ thể.

Trước khi thực hiện lệnh git commit, lệnh git add được sử dụng để thúc đẩy hoặc 'staging' các thay đổi cho dự án sẽ được lưu trong một commit. Hai lệnh git commit và git add này là hai trong những lệnh được sử dụng thường xuyên nhất.

So sánh git commit và SVN commit

Mặc dù chúng có cùng tên, git commit hoàn toàn khác svn commit. Điều này có thể làm mất rõ điểm khác biệt cho người mới sử dụng Git đến từ môi trường SVN, và điều này quan trọng để nhấn mạnh sự khác biệt. So sánh git commit và svn commit là so sánh mô hình ứng dụng tập trung (svn) và mô hình ứng dụng phân tán (Git).

Trong SVN, một commit đẩy các thay đổi từ SVN client cục bộ đến một kho SVN tập trung chia sẻ từ xa. Trong Git, các kho chia sẻ phân tán, Bản chụp được commit vào kho lưu trữ cục bộ và điều này không đòi hỏi bất kỳ tương tác nào với các kho Git khác. Git commits có thể được đẩy sau này đến các kho chia sẻ từ xa tùy ý.

Cách hoạt động của git commit

Ở mức cao, Git có thể được xem như một tiện ích quản lý dòng thời gian. Commits là các đơn vị xây dựng cơ bản của dòng thời gian của dự án Git. Commits có thể được xem như là bản chụp hoặc cột mốc trên dòng thời gian của dự án Git. Commits được tạo ra bằng lệnh git commit để chụp trạng thái của một dự án tại điểm đó trong thời gian.

Bản chụp của Git luôn được commit vào kho lưu trữ cục bộ. Điều này hoàn toàn khác biệt so với SVN, nơi bản sao làm việc được commit vào kho lưu trữ trung tâm. Ngược lại, Git không bắt buộc bạn phải tương tác với kho lưu trữ trung tâm cho đến khi bạn sẵn sàng.

Giống như khu vực sắp đặt là một bộ đệm giữa thư mục làm việc và lịch sử dự án, kho lưu trữ cục bộ của từng nhà phát triển là một bộ đệm giữa đóng góp của họ và kho lưu trữ trung tâm.

Điều này thay đổi mô hình phát triển cơ bản cho người sử dụng Git. Thay vì thực hiện một thay đổi và commit trực tiếp vào kho lưu trữ trung tâm, nhà phát triển Git có cơ hội để tích lũy các commits trong kho lưu trữ cục bộ của họ.

Điều này mang lại nhiều lợi ích so với cách hợp tác kiểu SVN: nó làm cho việc chia nhỏ một tính năng thành các commit nguyên tử, giữ các commit liên quan được nhóm lại và làm sạch lịch sử cục bộ trước khi công bố nó lên kho lưu trữ trung tâm. Nó cũng cho phép nhà phát triển làm việc trong một môi trường cô lập, trì hoãn tích hợp cho đến khi họ ở một điểm thuận lợi để hợp nhất với người sử dụng khác.

Mặc dù cô lập và tích hợp trì hoãn đều mang lại lợi ích riêng biệt, nhưng nó lại là lợi ích tốt nhất cho một nhóm khi tích hợp thường xuyên và trong đơn vị nhỏ. Để biết thêm thông tin về các phương pháp tốt nhất cho cộng tác nhóm Git, đọc về cách các nhóm tổ chức quy trình làm việc của họ với Git.

Bản chụp, không phải là sự khác biệt

Ngoài những sự khác biệt thực tế giữa SVN và Git, triển khai cơ bản của chúng cũng tuân theo triết lý thiết kế hoàn toàn khác nhau. Trong khi SVN theo dõi sự khác biệt của một tệp, mô hình quản lý phiên bản của Git dựa trên các bản chụp. Ví dụ, một commit của SVN bao gồm một bản khác biệt so với tệp gốc được thêm vào kho lưu trữ. Ngược lại, Git ghi lại toàn bộ nội dung của mỗi tệp trong mỗi commit.

Git commit là gì? Các tuỳ chọn phổ biến của git commit

Điều này làm cho nhiều thao tác Git nhanh hơn nhiều so với SVN, vì một phiên bản cụ thể của một tệp không cần phải được "tổng hợp" từ sự khác biệt của nó—phiên bản hoàn chỉnh của mỗi tệp sẵn có ngay lập tức từ cơ sở dữ liệu nội bộ của Git.

Mô hình bản chụp của Git có ảnh hưởng sâu rộng đến hầu hết mọi khía cạnh của mô hình quản lý phiên bản của nó, ảnh hưởng đến mọi thứ từ các công cụ nhánh và hợp nhất cho đến quy trình làm việc hợp tác của nó.

Các tùy chọn phổ biến

git commit

Commit bản chụp đã được sắp xếp. Điều này sẽ mở một trình soạn thảo văn bản yêu cầu bạn nhập thông báo commit. Sau khi bạn đã nhập thông báo, lưu tệp và đóng trình soạn thảo để tạo commit thực tế.

git commit -a

Commit một bản chụp của tất cả các thay đổi trong thư mục làm việc. Điều này chỉ bao gồm các sửa đổi của các tệp đã được theo dõi (những tệp đã được thêm bằng git add tại một số điểm trong lịch sử của chúng).

git commit -m "thông báo commit"

Một lệnh tắt tạo ngay lập tức một commit với thông báo commit đã được chuyển vào. Mặc định, git commit sẽ mở trình soạn thảo văn bản được cấu hình cục bộ và yêu cầu nhập thông báo commit. Việc truyền tùy chọn -m sẽ bỏ qua bước nhập thông báo commit và chấp nhận một thông báo ngắn trực tiếp.

git commit -am "thông báo commit"

Một lệnh tắt cho người dùng năng cao kết hợp cả hai tùy chọn -a và -m. Sự kết hợp này ngay lập tức tạo một commit từ tất cả các thay đổi đã được sắp xếp và chấp nhận một thông báo commit ngắn trực tiếp.

git commit --amend

Tùy chọn này thêm một cấp độ chức năng khác cho lệnh commit. Việc truyền tùy chọn này sẽ sửa đổi commit cuối cùng. Thay vì tạo một commit mới, các thay đổi đã được sắp xếp sẽ được thêm vào commit trước đó. Lệnh này sẽ mở trình soạn thảo văn bản đã được cấu hình trong hệ thống và yêu cầu thay đổi thông báo commit đã được chỉ định trước đó.

Tóm lại, git commit không chỉ là một lệnh đơn giản để lưu trữ mà còn là công cụ quyết định sự phát triển của dự án trong thời gian. Những tuỳ chọn phổ biến như -a, -m, và --amend mang lại sự linh hoạt và hiệu suất trong việc quản lý lịch sử phiên bản. Hiểu rõ về những khái niệm này không chỉ giúp tối ưu hóa quy trình làm việc mà còn đóng góp vào sự hiểu biết sâu sắc hơn về cách Git quản lý thay đổi và lịch sử của dự án phần mềm.