2011-02-11 37 views
76

Tôi chỉ mộtRollback để git cam kết cuối cùng

git commit -m "blah" 

sau đó tôi thêm vào một số tập tin, làm thế nào để rollback và loại bỏ những gì là trong các tập tin hiện tại của tôi mà chưa được thêm vào/cam kết?

+2

bản sao có thể có của [Git undo commit cuối cùng] (http://stackoverflow.com/questions/927358/git-undo-last-commit) –

+6

không, đây không phải là những gì OP đang yêu cầu - rõ ràng là anh ta muốn quay lại cam kết cuối cùng, không hoàn tác cam kết cuối cùng. anh ta không nói anh ấy đã thêm một số tập tin và sau đó cam kết. vì vậy rõ ràng anh ta muốn cam kết cuối cùng. – Paul

Trả lời

134

dưới đây ORIGINAL câu trả lời là những gì tôi "nghĩ rằng" OP đang tìm kiếm. Mặc dù, theo nhận xét của @ChrisNevill, câu trả lời gốc có thể không phải là những gì BẠN đang tìm kiếm. Tôi đã cập nhật câu trả lời để làm rõ.


→ ĐÁP CẬP NHẬT

1) Để UNDO thay đổi tập tin địa phương nhưng KHÔNG BỎ bạn cam kết cuối cùng, sau đó sử dụng

git reset --hard 

2) Để UNDO địa phương thay đổi tệp VÀ XÓA cam kết cuối cùng của bạn, sau đó sử dụng

git reset --hard HEAD^ 
or 
git reset --hard HEAD~ 

3) Để GIỮ thay đổi tập tin địa phương và chỉ loại bỏ cam kết cuối cùng của bạn, sau đó sử dụng

git reset --soft HEAD^ 
or 
git reset --soft HEAD~ 

Sử dụng git statusgit log thường xuyên để quan sát trạng thái hiện tại của bạn.


→ ĐÁP ORIGINAL

"Reset cây làm việc để cuối cùng cam kết"

"file sạch không rõ từ cây làm việc"

git clean 
+18

Lệnh này sẽ xóa cam kết trước đó của bạn, vì vậy hãy sử dụng cẩn thận! git reset --hard an toàn hơn – rudivonstaden

+4

WTF là câu trả lời đúng với 36 phiếu bầu. Tôi vừa mất một ngày làm việc này ... bởi vì tôi đọc câu trả lời không phải là bình luận. Đây không phải là câu trả lời đúng cho câu hỏi! –

+1

OK tất cả sẽ không bị mất! Bạn có thể làm git reflog điều này sẽ cho phép bạn xem các cam kết bạn đã thực hiện trước khi đặt lại. Sau đó bạn có thể kiểm tra các cam kết đó –

10

git reset --hard sẽ buộc thư mục làm việc quay lại cam kết cuối cùng và xóa tệp mới/đã thay đổi.

+2

đã làm điều đó, nhưng các tập tin vẫn còn đó. (các tập tin không được theo dõi vẫn còn đó) – Blankman

+0

git clean -df nên làm điều đó –

+0

trong trường hợp này bạn có thể thực hiện "git stash" – jipipayo

2

Bạn có thể hoàn nguyên cam kết sử dụng git revert HEAD^ để hoàn nguyên về cam kết tiếp theo. Bạn cũng có thể chỉ định các cam kết để trở lại bằng cách sử dụng id thay vì TRỤ^

+0

Điều này không "hoàn nguyên" theo nghĩa bạn đang nói. Điều này tạo ra một cam kết ngược lại. –

43

Nếu bạn muốn xóa nội dung và tệp mới được thêm vào ch đã được dàn dựng (để thêm vào chỉ mục) sau đó bạn sử dụng:

git reset --hard 

Nếu bạn muốn loại bỏ cũng của bạn mới nhất cam kết (là một với thông điệp "blah") sau đó tốt hơn để sử dụng:

git reset --hard HEAD^ 

để loại bỏ các tập tin untracked (các file mới chưa thêm vào chỉ mục) và thư mục sử dụng:

git clean --force -d 
+0

không git reset --hard HEAD^xóa vĩnh viễn cam kết mới nhất của tôi? như tôi không thể quay lại? – user137717

+0

có vẻ như "git clean --force -d" cũng xóa thư mục .gitignored –

0

Nếu bạn muốn chỉ uncommit cam kết sử dụng cuối cùng này:

git reset HEAD~ 

hoạt động như sự quyến rũ đối với tôi.

1

Một cách dễ dàng hết sức rõ ràng hủy bước thay đổi tập tin địa phương kể từ khi cam kết cuối cùng là đặt chúng trong một chi nhánh mới:

git branch changes 
git checkout changes 
git add . 
git commit 

này rời khỏi những thay đổi trong chi nhánh mới. Quay trở lại chi nhánh ban đầu để tìm lại nó cho lần commit cuối cùng:

git checkout master 

Chi nhánh mới là nơi tốt để thực hiện các thay đổi khác nhau mà không làm hỏng nhánh gốc.

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