Trong Git, thuật ngữ Squash được sử dụng để dồn các commit trước đó thành một. Nó không phải là một lệnh; thay vào đó, nó là một từ khóa. Squash là một kỹ thuật tuyệt vời cho những thay đổi cụ thể theo nhóm trước khi chuyển tiếp chúng cho những người khác. Bạn có thể hợp nhất nhiều commit thành một commit duy nhất bằng lệnh rebase tương tác hấp dẫn.
Nếu bạn là người dùng Git, thì bạn hẳn đã nhận ra tầm quan trọng của việc xóa một commit. Đặc biệt nếu bạn là một người đóng góp mã nguồn mở, thì nhiều lần, bạn phải tạo một PR (pull request) với commit bị bóp nghẹt. Bạn cũng có thể xóa các commit nếu bạn đã tạo PR.
Hãy cùng tìm hiểu làm thế nào để Squash commit?
Nội dung chính
1. Commit Squash
Là một người đóng góp có trách nhiệm cho Git, cần phải làm cho quá trình cộng tác hiệu quả và có ý nghĩa. Git cho phép một số công cụ cộng tác mạnh mẽ theo nhiều cách khác nhau. Git squash là một trong những công cụ mạnh mẽ giúp hỗ trợ cộng tác hiệu quả và ít đau đớn hơn.
squash không phải là lệnh; thay vào đó, nó là một trong nhiều tùy chọn có sẵn cho bạn để giảm giá tương tác git. squash cho phép chúng ta viết lại lịch sử. Giả sử chúng ta đã thực hiện nhiều commit trong quá trình làm việc của dự án, việc dồn tất cả các commit thành một commit lớn là lựa chọn đúng đắn hơn là thúc ép. Chúng ta hãy hiểu làm thế nào để squash hai commit.
Bước 1: Kiểm tra lịch sử commit
Để kiểm tra lịch sử commit, hãy chạy lệnh dưới đây:
git log --oneline
Lệnh đã cho sẽ hiển thị lịch sử trong một dòng. Chúng ta có thể theo dõi lịch sử và chọn các commit mà chúng ta muốn xóa. Hãy xem xét đầu ra dưới đây:
Bước 2: Chọn các commit để squash.
Giả sử chúng ta muốn xóa các commit cuối cùng. Để xóa các commit, hãy chạy lệnh dưới đây:
git rebase -i HEAD ~ 3
Lệnh trên sẽ mở trình soạn thảo văn bản mặc định của bạn và sẽ xóa ba lần commit cuối cùng. Trình chỉnh sửa sẽ mở như sau:
Từ hình ảnh trên, chúng ta có thể thấy các commit trước đó được hiển thị ở đầu trình chỉnh sửa. Nếu chúng ta muốn hợp nhất chúng thành một commit duy nhất, thì chúng ta phải thay thế từ pick bằng squash trên đầu trình soạn thảo. Để viết trên trình chỉnh sửa, nhấn nút ‘ i ‘ để vào chế độ chèn . Sau khi chỉnh sửa tài liệu, nhấn : wq để lưu và thoát khỏi trình chỉnh sửa .
Bước 3: Cập nhật các commit
Khi nhấn phím enter , một cửa sổ mới của trình soạn thảo văn bản sẽ được mở để xác nhận commit. Chúng ta có thể chỉnh sửa thông báo commit trên màn hình này.
Tôi đang chỉnh sửa thông báo commit đầu tiên của mình vì nó sẽ là sự kết hợp của cả ba commit. Hãy xem xét hình ảnh dưới đây:
Hình ảnh trên là màn hình trình chỉnh sửa để xác nhận việc hợp nhất các commit. Tại đây chúng ta có thể cập nhật các thông báo commit. Để chỉnh sửa trên trình soạn thảo này, hãy nhấn nút ‘ i ‘ cho chế độ chèn và chỉnh sửa văn bản mong muốn. Nhấn các phím : wq , để lưu và thoát khỏi trình chỉnh sửa.
Khi chúng ta thoát khỏi trình chỉnh sửa, nó sẽ hiển thị mô tả về các bản cập nhật. Hãy xem xét đầu ra dưới đây:
Kết quả ở trên liệt kê mô tả các thay đổi đã được thực hiện trên kho lưu trữ. Bây giờ, các commit đã bị bóp nghẹt. Kiểm tra lịch sử commit để xác nhận với sự trợ giúp của nhật ký git. Hãy xem xét đầu ra dưới đây:
Bước 4: Đẩy commit bị bóp
Bây giờ, chúng ta có thể đẩy commit bị bóp nghẹt này trên máy chủ từ xa. Để đẩy commit bị bóp nghẹt này, hãy chạy lệnh dưới đây:
git push origin master
Hoặc là
git push -f origin master
Lệnh trên sẽ đẩy các thay đổi trên máy chủ từ xa. Chúng ta có thể kiểm tra commit này trên kho lưu trữ từ xa của chúng ta. Hãy xem xét hình ảnh dưới đây:
Như bạn có thể thấy từ hình ảnh trên. Một commit mới đã được thêm vào kho lưu trữ từ xa của tôi.
2. Mặt hạn chế của Squashing
Không có nhược điểm đáng kể nào của việc bóp nghẹt. Nhưng chúng ta có thể xem xét một số sự kiện có thể ảnh hưởng đến dự án. Những sự kiện này như sau:
commit bóp nghẹt và phục hồi thay đổi lịch sử của kho lưu trữ. Nếu bất kỳ cộng tác viên nào không chú ý đến lịch sử cập nhật, thì điều đó có thể tạo ra xung đột. Tôi đề nghị một lịch sử trong sạch vì nó có giá trị hơn lịch sử khác. Mặc dù chúng ta có thể kiểm tra lịch sử ban đầu trong nhật ký tham chiếu.Có một nhược điểm khác, chúng ta có thể bị mất độ chi tiết vì bị bóp nghẹt. Cố gắng thực hiện các squash tối thiểu khi làm việc với Git. Vì vậy, nếu bạn mới sử dụng Git, hãy cố gắng tránh xa squash.
Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.
Tài liệu từ cafedev:
- Full series tự học Git từ cơ bản tới nâng cao tại đây nha.
- Ebook về Git tại đây.
- Các series tự học lập trình MIỄN PHÍ khác
- Nơi liên hệ hợp tác hoặc quảng cáo cùng Cafedevn tại đây.
- Giới thiệu chi tiết về Cafedev
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!