squash là để gộp commit với nhau, dành cho khi có người không biết commit, cứ "update/fix xxx" liên tục.
Còn lý do phải làm những cái trên là để dễ theo dõi kiểm soát lịch sử hơn. Sau này cần cũng có thể dùng được các tool như revert hay bisect, vốn rất cần lịch sử sạch.
VD
- revert: tool này hoạt động tốt nhất khi các commit là rõ ràng, chỉ thực hiện đúng theo ý nghĩa của nó. Một lịch sử toàn update/fix xxx, hay kiểu một thay đổi thực hiện trên nhiều commit, hoặc một commit thực hiện trên nhiều thay đổi không liên quan thì revert rất khó hoặc không có tác dụng.
- bisect: y/c cũng giống như revert, và còn cần tất cả các thời điểm trong lịch sử code ít nhất phải build thành công và chạy được. Với kiểu commit gây syntax error rồi sau đó đè thêm commit mới để fix thì rất khó bisect.