Một sự thay thế cho git merge
điều đó sẽ ghi đè lên các tập tin không bị theo dõi
Các ý kiến bên dưới sử dụng 'FOI' cho 'tệp quan tâm', các tệp mà
- tồn tại trong các nhà tài trợ,
- không tồn tại trong nhánh nhận
- và đang chặn hợp nhất vì chúng có mặt và không bị theo dõi trong thư mục làm việc của bạn.
git checkout -f donor-branch # replace FOI with tracked `donor` versions
git checkout receiving-branch # FOI are not in `receiving`, so they disapppear
git merge donor-branch # now the merge works
Một sự thay thế cho git pull
điều đó sẽ ghi đè lên các tập tin không bị theo dõi
pull = fetch + merge
, vì vậy chúng tôi làm git fetch
theo các git checkout -f, git checkout, git merge
mẹo ở trên.
git fetch origin # fetch remote commits
git checkout -f origin/mybranch # replace FOI with tracked upstream versions
git checkout mybranch # FOI are not in mybranch, so they disapppear
git merge origin/mybranch # Now the merge works. fetch + merge completes the pull.
Giải thích chi tiết
git merge -f
không tồn tại, nhưng git checkout -f
không.
Chúng tôi sẽ sử dụng git checkout -f
+git checkout
để xóa Files Of Interest (xem bên trên) và sau đó việc hợp nhất của bạn có thể tiến hành bình thường.
Bước 1. Bước này buộc thay thế FOI chưa được mã hóa bằng các phiên bản được theo dõi của chi nhánh nhà tài trợ (nó cũng kiểm tra chi nhánh nhà tài trợ và cập nhật phần còn lại của thư mục làm việc).
git checkout -f donor-branch
Bước 2. Bước này loại bỏ FOI vì chúng được theo dõi trong nhánh (nhà tài trợ) hiện tại của chúng tôi và vắng mặt trong receiving-branch
chúng tôi chuyển sang.
git checkout receiving-branch
Bước 3. Bây giờ FOI vắng mặt, việc hợp nhất trong nhánh nhà tài trợ sẽ không ghi đè lên bất kỳ tệp nào chưa được theo dõi, vì vậy chúng tôi không gặp lỗi.
git merge donor-branch