2011-09-18 14 views
35

Tôi nhân bản một repo git và sau đó bắt đầu chơi xung quanh trong nhánh chính của nó. Sau một thời gian, tôi muốn bỏ qua những thay đổi mà tôi vừa mới thực hiện (không cam kết) và chuyển sang một nhánh khác. Tuy nhiên, nó ngăn tôi chuyển đổi vì có những thay đổi không được cam kết. Làm thế nào để tôi bỏ qua chúng mà không có stashing chúng? Đây là những gì sẽ xảy ra:Chuyển đổi chi nhánh sau khi hủy bỏ các thay đổi hiện tại trong git

$ git checkout gh-pages 
error: Your local changes to the following files would be overwritten by checkout: 
     somefile.txt 
Please, commit your changes or stash them before you can switch branches. 
Aborting 

Trả lời

59

Lựa chọn 1

git checkout -f gh-pages 
.210

Lựa chọn 2

git reset --hard  # beware: don't make that a habit 
git checkout gh-pages 
+2

Tùy chọn 1 không hoạt động. Git là một goliath của một người giải quyết vấn đề miễn cưỡng. Tôi đã buộc phải làm cho git reset --hard .. một thói quen. Chén thánh của lệnh git sửa mọi thứ. – shailenTJ

+2

@shailenTJ Bạn nên là một nhà thơ :) Và yên tâm, tôi sử dụng git reset --hard thường xuyên. Nhưng vấn đề là, nó là một vũ khí mạnh mẽ và bạn không nên sử dụng nó mà không đưa ra suy nghĩ đúng đắn, vì nó _will_ mất bất cứ thứ gì không được cam kết (hoặc ít nhất được thêm vào chỉ mục một lần, và điều đó sẽ phức tạp để phục hồi). – sehe

+0

Tùy chọn 2 không hoạt động đối với tôi, nó chỉ lặp lại lỗi. Git là một cơn ác mộng. – Owl

5

Bạn có thể bỏ qua tất cả các thay đổi không được cam kết.

git reset --hard HEAD

3

Nếu bạn thực sự chắc chắn rằng bạn muốn vứt bỏ những thay đổi không bị giam của bạn (tức là những người được dàn dựng cũng như những người trong cây làm việc của bạn), bạn có thể làm:

git reset --hard 

Nói chung, stashing thường an toàn hơn

+0

tôi thực sự muốn t o vứt bỏ những thay đổi của tôi, nó sẽ không cho tôi. Tôi đã thử git reset --hard, tôi đã thử stashing và thả stash. Helllllp. Cứu tôi khỏi phần mềm phiên bản khủng khiếp này. – Owl

+0

@Owl Tôi nghĩ tốt nhất nên tạo một câu hỏi mới cho vấn đề của bạn, bao gồm đầu ra của 'trạng thái git'. –

3

Nếu bạn có tập tin unstaged, hãy thử:

git checkout -- . 

Hoặc

git checkout -- filename 
+0

Điều này đã khắc phục được sự cố của tôi, cảm ơn bạn. Dường như vấn đề này được giải quyết bằng cách kiểm tra git -. hoặc git reset --hard. Một trong số đó nên sửa chữa nó. – Owl

11

Chỉ vì lợi ích của sự hoàn chỉnh, và cho những người hạ cánh ở đây bằng cách tìm kiếm : Mặc dù OP yêu cầu cụ thể cho một giải pháp mà không có stashing, điều đáng nói đến là stash thực sự là một lựa chọn rất tốt đẹp:

Lệnh lưu các sửa đổi cục bộ của bạn và hoàn nguyên thư mục hoạt động để khớp với cam kết CHÍNH.

Vì vậy, bạn có thể chỉ đơn giản là

git stash 

này giống như đặt để HEAD. Khi được hoàn toàn tích cực nhất định mà thực sự những thay đổi đó không bị giam là vô giá trị, chỉ cần

git stash drop 

Bạn thậm chí có thể có nhiều ẩn nấp, vv như đã đề cập trong liên kết tài liệu hướng dẫn ở trên.

Tôi sẽ khuyên bạn nên thực hành này vì nó đặt một thói quen suy nghĩ lại trước khi đặt lại mà không có chi phí đáng kể.

+0

Điều đó cũng không hiệu quả với tôi. – Owl

0

git add -A git stash

này sẽ xóa tất cả những thay đổi bạn đã thực hiện (Chỉ có những người không cam kết)

0

Bạn có thể loại bỏ những thay đổi bạn đã thực hiện trong một tập tin cụ thể:

git checkout somefile.txt 

Và sau đó nhảy trơn tru đến chi nhánh:

git checkout gh-pages