2011-01-28 8 views
73

Tôi đang làm việc trong một chi nhánh (ví dụ: design) và tôi đã thực hiện một số thay đổi, nhưng tôi cần phải loại bỏ tất cả thay đổi và đặt lại để phù hợp với phiên bản kho lưu trữ. Tôi nghĩ rằng git checkout design sẽ làm điều đó, nhưng nó chỉ nói với tôi rằng tôi đã ở chi nhánh design và tôi có 3 tệp đã sửa đổi.Làm thế nào để loại bỏ tất cả các thay đổi được thực hiện cho một chi nhánh?

Làm cách nào để loại bỏ những thay đổi đó và nhận chi nhánh hiện tại trên máy chủ từ xa?

Trả lời

133

Lưu ý: Bạn KHÔNG THỂ THEO D 01I điều này.

Hãy thử git checkout -f này sẽ loại bỏ bất kỳ thay đổi địa phương mà là không cam kết trong ALL ngành và tổng thể.

47

git reset --hard thể giúp bạn nếu bạn muốn vứt bỏ tất cả mọi thứ kể từ khi bạn cam kết cuối cùng

+5

hoặc 'git reset --hard HEAD ^' – deadfish

+10

'git reset --hard HEAD ^' thực sự phải là câu trả lời được chấp nhận. OP đã không hỏi về các chi nhánh khác ... – bphilipnyc

+2

Tôi đã thử điều này, và tôi nghĩ rằng nó đã xóa mọi thứ kể từ lần đẩy cuối cùng của tôi, không chỉ là cam kết cuối cùng của tôi. –

16

Nếu bạn không muốn bất kỳ thay đổi trong design và chắc chắn muốn nó chỉ phù hợp với một từ xa chi nhánh, bạn cũng có thể chỉ cần xóa chi nhánh và tạo lại chi nhánh:

# Switch to some branch other than design 
$ git br -D design 
$ git co -b design origin/design   # Will set up design to track origin's design branch 
+5

cũng: git checkout design; git reset --hard origin/design – user37078

+0

Tôi cũng sẽ cam kết trước khi xóa chi nhánh – Asarluhi

+0

Đây phải là câu trả lời được chấp nhận –

7

@Will, git immersion là một hướng dẫn thực sự tốt đẹp và đơn giản. nó sẽ chỉ cho bạn cách hoàn tác các thay đổi đối với các trường hợp sau: không được tổ chức, dàn dựng và cam kết. phòng thí nghiệm 14-18

+2

Tôi chỉ muốn nói rằng bây giờ tôi đã thực hiện git ngâm .. hơn một năm sau đó. OI! Tôi nên làm điều này sớm hơn rất nhiều ... – Will

10
git diff master > branch.diff 
git apply --reverse branch.diff 
2

Trong thư mục gốc nguồn: git reset ./ HEAD <--un-stage any staged changes git checkout ./ <--discard any unstaged changes

1

Khi bạn muốn loại bỏ những thay đổi trong chi nhánh địa phương của bạn, bạn có thể giấu những thay đổi cách sử dụng lệnh git stash.

git stash tiết kiệm "some_name"

thay đổi của bạn sẽ được lưu lại và bạn có thể lấy những người sau này, nếu bạn muốn hoặc bạn có thể xóa nó. Sau khi thực hiện việc này, chi nhánh của bạn sẽ không có bất kỳ mã nào không được cam kết và bạn có thể lấy mã mới nhất từ ​​nhánh chính của mình bằng cách sử dụng git pull.