Tôi đang cố gắng để hiểu sự khác biệt giữa
git push --force
và
git push --force-with-lease
Tôi đoán là cái sau chỉ đẩy vào điều khiển từ xa nếu điều khiển từ xa không có cam kết mà chi nhánh địa phương không có ?
--force-with-leasetương tự như hướng dẫn so sánh và trao đổi trên các CPU hiện đại: người muốn trao đổi xảy ra sẽ cung cấp giá trị mong đợi và giá trị mới. Hệ thống thực hiện trao đổi so sánh giá trị mong đợi với giá trị hiện tại thực và trao đổi khi và chỉ khi hai giá trị bằng nhau. Với git push, giá trị mong đợi là bất cứ thứ gì có trong tên theo dõi từ xa, ví dụ, git push --force-with-lease origin Xgửi của riêng bạn origin/Xcùng với giá trị mong muốn mới; originGit cho bạn biết nếu nó đã trao đổi hay không.
originđã trao đổi, bạn đã hoàn thành. Nếu không, bạn có thể chạy git fetch originđể chọn giá trị hiện tại mới , xử lý lại các thay đổi của mình nếu cần và chạy một phép so sánh và hoán đổi bắt buộc khác để thử lại.
git help pushcó các trường hợp sử dụng giải thích mục đích của nó (về cơ bản để giữ cho bạn không bỏ qua một thay đổi mà ai đó vừa đẩy lên). Điều tôi không rõ ràng với tôi là cách hoạt động của nhánh theo dõi từ xa. Nhưng có lẽ thông thường, nó sẽ cần phải nhìn chính xác như thế nào khi bạn nhìn lần trướcfetchhoặcpullkhông có cam kết mới.