Làm cách nào tôi có thể bảo git bỏ qua tệp cục bộ của mình và lấy tệp từ chi nhánh từ xa mà không cố gắng hợp nhất và gây ra xung đột?
Làm cách nào tôi có thể bảo git bỏ qua tệp cục bộ của mình và lấy tệp từ chi nhánh từ xa mà không cố gắng hợp nhất và gây ra xung đột?
Câu trả lời:
Đây là giải pháp an toàn nhất:
git stash
Bây giờ bạn có thể làm bất cứ điều gì bạn muốn mà không sợ xung đột.
Ví dụ:
git checkout origin/master
Nếu bạn muốn bao gồm các thay đổi từ xa trong nhánh chính, bạn có thể làm:
git reset --hard origin/master
Điều này sẽ khiến bạn phân nhánh "master" để trỏ đến "origin / master".
git stash; git fetch origin; git reset --hard origin/master
git stash
? git stash list
trống rỗng
Tôi hiểu câu hỏi như thế này: bạn muốn thay thế hoàn toàn nội dung của một tệp (hoặc một lựa chọn) từ thượng nguồn. Bạn không muốn ảnh hưởng trực tiếp đến chỉ mục (vì vậy bạn sẽ trải qua add + commit như bình thường).
Đơn giản chỉ cần làm
git checkout remote/branch -- a/file b/another/file
Nếu bạn muốn làm điều này cho các cây con rộng rãi và thay vào đó muốn ảnh hưởng trực tiếp đến chỉ mục sử dụng
git read-tree remote/branch:subdir/
Sau đó, bạn có thể (tùy chọn) cập nhật bản sao làm việc của mình bằng cách thực hiện
git checkout-index -u --force
Sự hiểu biết của tôi là, ví dụ, bạn đã lưu sai một tệp bạn đã cập nhật cho mục đích thử nghiệm. Sau đó, khi bạn chạy "trạng thái git", tệp sẽ xuất hiện dưới dạng "Đã sửa đổi" và bạn nói một số từ xấu. Bạn chỉ muốn phiên bản cũ trở lại và tiếp tục hoạt động bình thường.
Trong kịch bản đó, bạn có thể chạy lệnh sau:
git checkout -- path/filename
Tôi sẽ kiểm tra tệp từ xa từ "chính" (kho lưu trữ từ xa / nguồn gốc) như thế này:
git checkout master <FileWithPath>
Ví dụ: git checkout thành phần chính / indexTest.html
Sử dụng -s
hoặc --strategy
tùy chọn kết hợp với -X
tùy chọn. Trong câu hỏi cụ thể của bạn, bạn muốn giữ tất cả các tệp từ xa và thay thế các tệp cục bộ cùng tên.
Thay thế xung đột bằng phiên bản từ xa
git merge -s recursive -Xtheirs upstream/master
sẽ sử dụng phiên bản repo từ xa của tất cả các tệp xung đột.
Thay thế xung đột bằng phiên bản cục bộ
git merge -s recursive -Xours upstream/master
sẽ sử dụng phiên bản repo cục bộ của tất cả các tệp xung đột.
git merge -s their
.