Tôi hiện đang làm việc cho một công ty sử dụng VSTS để quản lý mã git. Cách "hợp nhất" của Microsoft để hợp nhất một chi nhánh là thực hiện "hợp nhất squash", nghĩa là tất cả các cam kết cho chi nhánh đó sẽ bị ép thành một cam kết mới kết hợp tất cả các thay đổi.
Vấn đề là, điều gì sẽ xảy ra nếu tôi thực hiện một số thay đổi trong một chi nhánh cho một mục tồn đọng, sau đó ngay lập tức muốn bắt đầu thực hiện các thay đổi trong một chi nhánh khác cho một mục tồn đọng khác và những thay đổi đó phụ thuộc vào bộ thay đổi của chi nhánh đầu tiên?
Tôi có thể tạo một nhánh cho mục tồn đọng đó và đặt nó trên nhánh đầu tiên. Càng xa càng tốt. Tuy nhiên, khi đến lúc tạo một yêu cầu kéo cho nhánh thứ hai của tôi, nhánh đầu tiên đã được hợp nhất thành chủ và vì nó được thực hiện dưới dạng hợp nhất squash, git lên một loạt các xung đột. Điều này là do git không thấy các cam kết ban đầu mà nhánh thứ hai được dựa trên, nó chỉ nhìn thấy một hợp nhất bí đao lớn và vì vậy để hợp nhất nhánh thứ hai để làm chủ, nó cố gắng phát lại tất cả các cam kết của nhánh thứ nhất trong đầu hợp nhất bí đao, gây ra nhiều xung đột.
Vì vậy, câu hỏi của tôi là, có cách nào để khắc phục điều này (ngoài việc không bao giờ dựa vào một nhánh tính năng khác, điều này làm hạn chế quy trình làm việc của tôi) hoặc hợp nhất squash chỉ phá vỡ thuật toán hợp nhất của git?
feature1
vào chủ, sau đó muốn hợp nhấtfeature2
sau. Trong trường hợp đó, cách tiếp cận đầu tiên sẽ dẫn đến xung đột khi git cố gắng áp dụng lại cácfeature1
cam kết trên đỉnh của cam kết bị đè bẹp, trong khi cách thứ hai sẽ cho phép git xác định rằng các cam kết đó không cần phải được hợp nhất?