2009-08-18 48 views
30

Làm cách nào để bạn có thể git-checkout mà không ghi đè dữ liệu?Để git checkout mà không ghi đè dữ liệu

tôi chạy

git checkout master 

tôi nhận được

error: Entry 'forms/answer.php' would be overwritten by merge. Cannot merge. 

này có gì ngạc nhiên, vì tôi không biết rằng Git kết hợp khi tôi git-checkout. Tôi luôn chạy theo lệnh riêng biệt git merge new-feature. Điều này dường như không cần thiết nếu Git hợp nhất khi thanh toán.

Trả lời

51

Git cảnh báo bạn rằng biểu mẫu/answers.php có các thay đổi trong bản sao hoặc chỉ mục làm việc của bạn chưa được cam kết.

Bạn có thể sử dụng git-stash để lưu thay đổi của bạn sau đó git-stash áp dụng để khôi phục chúng.

Trường hợp sử dụng phổ biến là git-stash là bạn đang thực hiện các thay đổi nhưng phải tạm thời thanh toán chi nhánh khác để sửa lỗi. Vì vậy, bạn có thể stash các thay đổi trong chỉ mục và bản sao làm việc của mình, thanh toán chi nhánh khác, thực hiện sửa lỗi, cam kết, thanh toán chi nhánh ban đầu và git-stash áp dụng để khôi phục các thay đổi của bạn. tắt.

+1

Cảm ơn bạn đã đề cập đến 'git-stash'! - Tôi không biết rằng mục đích của nó là được sử dụng trong các tình huống như thế này. –

+2

Vì lý do gì, tôi không thể sử dụng lệnh git-stash. Thay vào đó, tôi đã phải sử dụng "git stash" (không có dấu nối). –

+0

Nếu tất cả những gì bạn muốn là kiểm tra một bản sửa đổi khác nhau trong khi vẫn giữ các thay đổi không được cam kết (đôi khi là khi tìm bản sửa đổi giới thiệu lỗi), đề xuất của Jakub ('git checkout -m') dễ dàng hơn nhiều. –

18

Git thực hiện hợp nhất 2 chiều thay đổi chưa được thực hiện khi chuyển nhánh (sử dụng git checkout <branch>), nhưng thông thường nó chỉ kết hợp tầm thường (cấp độ cây).

Bên cạnh git-stashsolution by Karl Voigtland, bạn có thể cho thêm các tùy chọn để git checkout, chọn một trong các tùy chọn sau:

  • biết chính xác git để cố gắng hơn nữa để hợp nhất thay đổi uncomitted vào chi nhánh bạn chuyển sang với -m/--merge Tùy chọn. Với tùy chọn này, một sự kết hợp ba chiều giữa nhánh hiện tại, nội dung cây làm việc của bạn và nhánh mới được thực hiện, và bạn sẽ ở trên nhánh mới.

  • Yêu cầu git gửi ghi đè thay đổi chưa được thực hiện, vứt bỏ thay đổi cục bộ bằng tùy chọn -f. Cảnh báo: các thay đổi chưa được sửa sẽ bị mất!

+2

Cảm ơn vì điều này. Cái thứ hai ('git checkout -f master') đã giúp tôi lấy lại. Tôi không biết những gì thay đổi tôi bị mất, nhưng họ không quan trọng vì đây là một bản sao rất cũ của một repo mà tôi chỉ muốn kiểm tra. – mgilson

+0

Có thể thực hiện "đối nghịch" của 'git checkout -f' không? Về cơ bản tôi muốn Git từ bỏ việc kiểm tra các tập tin có thể gây xung đột. – giusti

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