2009-10-23 44 views
313

Tôi đã thực hiện 'cam kết git' nhưng tôi chưa đẩy cho người khác. vì vậy khi tôi thực hiện trạng thái 'git', tôi nhận được '# Nhánh của bạn trước' master 'bằng 1 commit'.Xóa cam kết git chưa được đẩy

Vì vậy, nếu tôi muốn quay trở lại top tôi cam kết, tôi có thể chỉ làm"

git reset --hard eb27bf26dd18c5a34e0e82b929e0d74cfcaab316 

cho rằng khi tôi làm 'git log'

 
commit eb27bf26dd18c5a34e0e82b929e0d74cfcaab316 
Date: Tue Sep 29 11:21:41 2009 -0700 


commit db0c078d5286b837532ff5e276dcf91885df2296 
Date: Tue Sep 22 10:31:37 2009 -0700
+6

Câu hỏi này có vẻ trùng lặp với một câu hỏi khác của bạn: http://stackoverflow.com/questions/1338728/how -to-delete-a-git-cam kết –

+0

Có thể trùng lặp của [Xóa cam kết từ một nhánh trong Git] (https://stackoverflow.com/questions/1338728/delete-commits-from-a-branch-in-git) –

+0

Bản sao có thể có của [Cách hoàn nguyên kho lưu trữ Git sang cam kết trước đó?] (Https://stackoverflow.com/questions/4114095/how-to-revert-git-repository-to-a-previous-commit) –

Trả lời

306

Trên thực tế, khi bạn sử dụng git reset, bạn nên tham khảo cam kết rằng bạn đang đặt lại thành; vì vậy, bạn có thể muốn cam kết db0c078, có thể là

Một phiên bản dễ dàng hơn sẽ là git reset --hard HEAD^, để đặt lại về cam kết trước đó trước phần đầu hiện tại; theo cách đó bạn không phải sao chép xung quanh ID cam kết.

Cẩn thận khi bạn làm bất kỳ git reset --hard, vì bạn có thể mất mọi thay đổi không được cam kết mà bạn có. Bạn có thể muốn kiểm tra git status để đảm bảo bản sao làm việc của bạn sạch sẽ hoặc bạn muốn thổi bay mọi thay đổi đang có.

Bên cạnh đó, thay vì TRỤ bạn có thể sử dụng origin/master như tài liệu tham khảo, theo đề nghị của @bdonlan trong các ý kiến: git reset --hard origin/master

+223

Hoặc 'git reset --hard origin/master', để đặt lại nó về bất kỳ nguồn gốc nào. – bdonlan

+0

Vâng, đó cũng là một công cụ hữu ích. –

+1

Một con trỏ hữu ích khác mà bạn có thể đặt lại là ORIG \ _HEAD hoặc tổng quát của nó bằng cách sử dụng reflog HEAD @ {1} (vị trí cuối cùng của HEAD). –

267

Nếu bạn chưa đẩy thay đổi của bạn từ xa

git reset HEAD~1 

Kiểm tra nếu bản sao làm việc được làm sạch bởi git status.

ELSE bạn đã đẩy thay đổi của bạn từ xa

git revert HEAD 

Lệnh này sẽ trở lại/xóa người cuối cùng cam/thay đổi và sau đó bạn có thể đẩy

+11

Câu trả lời cho "Hủy bỏ cam kết git mới nhất chưa được đẩy" (câu trả lời gần nhất IMHO) –

+9

Ngoài ra, nó giữ các thay đổi cục bộ trong cam kết cuối cùng, trong khi git reset --hard không –

103
git reset --hard origin/master 

để thiết lập lại nó để bất cứ điều gì nguồn gốc là lúc.

Điều này đã được đăng bởi @bdonlan trong số comments. Tôi đã thêm câu trả lời này cho những người không đọc nhận xét.

+2

Câu hỏi này đã được hỏi gần 5 năm trước, và điều này đã có trong một trong những ý kiến. –

+1

Điều gì sẽ xảy ra nếu nhánh nội bộ hiện tại khác với 'master' - tôi có nên sử dụng' origin/mybranch' sau đó không? –

+0

Cảm ơn bạn đã chia sẻ! Đây là người duy nhất làm việc cho tôi. – Hajjat

11

Tôi đã trải nghiệm cùng một tình huống tôi đã làm như dưới đây dễ dàng hơn nhiều. Bằng cách vượt qua commit-Id bạn có thể đạt tới cái đặc thù cam bạn muốn đi:

git reset --hard {commit-id} 

Như bạn muốn loại bỏ cuối cùng của bạn cam kết, do đó bạn cần phải vượt qua commit-Id nơi bạn cần phải di chuyển con trỏ của bạn:

git reset --hard db0c078d5286b837532ff5e276dcf91885df2296 
+0

Chỉ là một cảnh báo cho người mới như bản thân mình - sao lưu bất kỳ tệp nào mà bạn muốn GIỮ các thay đổi, vì chúng sẽ được hoàn nguyên về phiên bản cũ hơn. Kịch bản của tôi là tôi vô tình đặt một kết xuất cơ sở dữ liệu trong thư mục repo của tôi và sau đó cam kết - tôi rõ ràng không muốn cam kết các tệp đó tới repo nhưng DID muốn giữ các thay đổi mà tôi đã thực hiện cho các tệp khác. Vì vậy, tôi đã phải sao chép và dán các thay đổi cần thiết từ bản sao lưu tôi đã thực hiện TRƯỚC KHI cài đặt lại git. – user1063287

0

Có một cách để xóa chi nhánh địa phương và thanh toán chi nhánh đó khỏi máy chủ nếu chi nhánh địa phương của bạn ở phía trước từ xa bằng nhiều lần commit và bạn cần phải hủy bỏ tất cả chúng.

0

Đây là những gì tôi làm:

thanh toán đầu tiên chi nhánh của bạn (đối với trường hợp của tôi master chi nhánh):

git checkout master 

Sau đó thiết lập lại để TRỤ từ xa^(nó sẽ loại bỏ tất cả thay đổi địa phương của bạn), buộc sạch và kéo:

git reset HEAD^ --hard && git clean -df && git pull 
Các vấn đề liên quan