Xuất thân từ nền tảng SVN, một trong những điều khó nhất để làm quen khi làm việc với các hệ thống DVCS là cách mà tất cả họ dường như coi bất kỳ thay đổi không được cam kết nào giống như một quả bom hẹn giờ.
Trong Mercurial, nếu bạn cố gắng tìm nạp các thay đổi và bạn có bất kỳ thay đổi không được cam kết nào trong bản sao làm việc của mình, bạn phải nhảy qua các vòng để có được nó để hợp nhất các thay đổi đến. Hãy thử chuyển nhánh? Nó sẽ buộc bạn phải gác lại mọi thứ và sau đó bạn phải lập tức hủy bỏ tất cả mọi thứ ở đầu bên kia. (SVN không gặp rắc rối với một trong hai kịch bản này.)
Git là về cùng một cách. Tôi đang làm việc cùng với một nhà phát triển khác trong một dự án và tôi chỉ cố gắng chọn một trong những cam kết của anh ấy vào ngã ba của mình. Nó từ chối cho tôi vì tôi có những thay đổi không được cam kết trong bản sao làm việc của mình, trên các tệp hoàn toàn khác với những thay đổi trong cam kết của anh ấy. Thậm chí không có tùy chọn hợp nhất; Rõ ràng là tôi phải bỏ những thay đổi của mình trước!
Nếu một người đối xử với một thứ hoàn toàn vô hại với sự thận trọng cao độ như vậy, tôi sẽ gọi đó là "nỗi ám ảnh", một nỗi sợ phi lý nên được coi là một rối loạn tâm thần. Nhưng Git và Mercurial được thiết kế bởi hai nhóm nhà phát triển thông minh, hợp lý khác nhau, vì vậy tôi phải tự hỏi liệu họ có biết điều gì mà tôi không biết không.
Có một lý do kỹ thuật nào biện minh cho thái độ này đối với những thay đổi không được cam kết? Và nếu vậy, tại sao vấn đề trong câu hỏi dường như chỉ tồn tại trên DVCSes?