Cách tiếp cận cá nhân của tôi đối với một cam kết git là mọi cam kết nên bao gồm một đơn vị thay đổi , trong tính đầy đủ của nó.
Khi tôi phát triển, tôi thường tập trung vào các đơn vị như vậy. Nhưng đôi khi, sự chú ý của tôi đi lạc ở một nơi khác và tôi làm việc một lúc trên một đơn vị khác. Điều này có lẽ không tối ưu, nhưng tôi đã học được cách cam kết cẩn thận ( git add --interactive
là một người bạn tốt của tôi).
Tuy nhiên, điều có thể xảy ra là tôi quên chọn lọc các thay đổi của mình và thay vào đó là cam kết toàn bộ tệp, tin rằng tất cả các thay đổi tôi thấy trong diff thực sự có liên quan đến cùng một đơn vị, mặc dù có thể có một hoặc hai thay đổi hoàn toàn không liên quan.
Rồi tôi git push
.
Điều này có nguy hiểm không? Tôi có nên nỗ lực sửa đổi cam kết để nó chỉ bao gồm các thay đổi dự định không? Mối quan tâm chính của tôi là bất cứ ai khác nhìn vào lịch sử sẽ thấy sự thay đổi và có thể sẽ gãi đầu trong vài phút trước khi nhận ra đó rất có thể là một sai lầm. Tệ hơn nữa, tôi có thể tưởng tượng rằng sự thay đổi thậm chí sẽ có vẻ liên quan và lập trình viên có thể không nhận ra lỗi.
Vấn đề là, vì tôi đã đẩy, tôi không thể viết lại lịch sử của máy chủ một cách an toàn , vì vậy trước tiên tôi có thể phải hoàn nguyên lại cam kết, phân tách đúng và cam kết lại. Ngoài ra, tôi chỉ có thể sửa đổi cam kết với một thông điệp cam kết tốt hơn, nhưng tôi sẽ phải thực sự rất nhanh vì nó cũng yêu cầu viết lại lịch sử. Như một phương sách cuối cùng, tôi có thể chỉ đơn giản là cam kết đơn vị tôi đang làm việc tiếp theo, để lại một lưu ý rằng có một thay đổi liên quan trong lần xác nhận trước đó (nhưng điều này cảm thấy sai).
Tôi hiểu rằng trong một thiết lập nhiều nhà phát triển với quy trình xem xét mã phù hợp, điều này có thể sẽ không xảy ra. Tôi cũng hiểu rằng nếu tôi là nhà phát triển duy nhất trong một dự án, thì viết lại lịch sử là giải pháp tốt nhất cho việc này.