2011-01-24 33 views
207

Tôi đang cố gắng lấy mã từ repo GitHub của tôi lên máy chủ của tôi, nhưng quá trình kéo không thành công do xung đột hợp nhất. Tôi không muốn giữ bất kỳ thay đổi nào có thể xảy ra trên máy chủ cục bộ của tôi kể từ lần kéo cuối cùng.Giải quyết xung đột bằng cách sử dụng các thay đổi từ xa khi kéo từ Git remote

Vì vậy, có cách nào tôi có thể buộc Git ghi đè lên với bất kỳ phiên bản nào trong GitHub, thay vì làm phiền tôi về xung đột không?

+0

trùng lặp? http://stackoverflow.com/questions/4779715/error-when-running-git-pull-origin-master/4779723#4779723 –

+3

@nvm: Không. Đây là về xung đột hợp nhất thực sự, không phải các tệp không được theo dõi sẽ bị ghi đè. – Cascabel

Trả lời

354

Nếu bạn thực sự muốn loại bỏ các cam kết bạn đã thực hiện tại địa phương, tức là không bao giờ có chúng trong lịch sử một lần nữa, bạn không yêu cầu làm thế nào để kéo kéo có nghĩa là hợp nhất, và bạn không cần phải hợp nhất. Tất cả những gì bạn cần làm là:

# fetch from the default remote, origin 
git fetch 
# reset your current branch (master) to origin's master 
git reset --hard origin/master 

Cá nhân tôi khuyên bạn nên tạo chi nhánh dự phòng tại HEAD hiện tại của bạn trước tiên, nếu bạn nhận ra đây là một ý tưởng tồi, bạn không mất dấu.

Nếu mặt khác, bạn muốn giữ lại những cam kết và làm cho nó trông như thể bạn sáp nhập với xuất xứ, và gây ra việc hợp nhất để giữ cho các phiên bản từ chỉ nguồn gốc, bạn có thể sử dụng chiến lược ours merge:

# fetch from the default remote, origin 
git fetch 
# create a branch at your current master 
git branch old-master 
# reset to origin's master 
git reset --hard origin/master 
# merge your old master, keeping "our" (origin/master's) content 
git merge -s ours old-master 
+0

Trong khối lệnh git thứ hai ở đó .. nên có 'git fetch origin' sau lệnh thứ hai? –

+0

@David: Có, bạn nên tìm nạp nguồn gốc tại một số điểm. Xin lỗi, tôi coi nó là ngầm. – Cascabel

+1

Không có gì có thể được ngụ ý khi nói đến tôi và git ;-). Nghiêm túc, mặc dù một triệu. Câu trả lời của bạn là chính xác những gì tôi đang tìm kiếm. –

82

Bạn có thể sử dụng câu trả lời từ liên kết trùng lặp được chỉ định bởi nvm.

Hoặc bạn có thể giải quyết xung đột bằng cách sử dụng những thay đổi của họ (nhưng một số thay đổi của bạn có thể được giữ nếu họ không xung đột với phiên bản từ xa):

git pull -s recursive -X theirs 
+2

Có vẻ như không hoạt động đối với tôi. Tôi nhận được "lỗi: chuyển đổi không rõ' X '"bằng cách sử dụng git git phiên bản 1.5.6.5. Tôi có cần nâng cấp lên phiên bản không ổn định không? –

+0

Ngoài ra, Antoine, nếu bạn muốn lấy phiên bản gốc của mọi thứ, không chỉ nội dung xung đột, bạn có thể - xem câu trả lời của tôi. – Cascabel

+0

Và cuối cùng, câu trả lời của nvm không trùng lặp. Đó không phải là một trường hợp xung đột hợp nhất (nội dung được theo dõi trên cả hai mặt, với sự khác biệt) mà là một hợp nhất sẽ ghi đè lên nội dung không được theo dõi. – Cascabel

Các vấn đề liên quan