2012-03-31 34 views
21

Tôi có một repo, nơi tôi đã thực hiện một thay đổi đó là gây ra địa ngục hợp nhất và tôi muốn giả vờ nó không bao giờ tồn tại. Câu chuyện dài, phức tạp liên quan đến việc nối một repo đã tồn tại trên đầu trang được cập nhật thông qua git-p4, nhưng upshot là tôi thực sự, thực sự muốn git giả vờ một thay đổi nhất định chưa từng tồn tại.Git: Có tương đương với dải hg không?

Nếu đó là Mercurial, tôi chắc rằng tôi có thể khắc phục sự cố của mình với hg strip, nhưng tôi không thể tìm thấy lệnh như vậy trong Git.

Cảm ơn mọi đề xuất bạn có thể có.

Trả lời

26

Có nhiều lệnh bạn cần thực hiện. Đầu tiên, như những người khác đã đề cập, là git reset. Bạn sẽ muốn tìm changeset chỉ trước một trong những bạn muốn thoát khỏi, và sử dụng

git reset --hard <changeset> 

này sẽ thay đổi người đứng đầu chi nhánh hiện tại (và chỉ số) để trỏ vào changeset đó, nhưng Thay đổi "không hợp lệ" là vẫn còn hiện diện. Nó sẽ không được bao gồm nếu bạn đẩy, nhưng nó sẽ được bao gồm nếu bạn sao chép kho lưu trữ cục bộ của bạn và nó vẫn có thể được tham chiếu trong các lệnh log và checkout.

Giả sử không có tài liệu tham khảo khác để nó (ví dụ như cam kết tiếp theo, thẻ, vv ...) sau đó bạn có thể làm sạch nó lên với:

git gc --prune=now 

tôi thấy lệnh này nhờ http://help.github.com/remove-sensitive-data/, mà còn đề cập đến rằng (như với hg strip) nếu bạn đã đẩy thay đổi "không hợp lệ" thành vị trí ở xa, bạn không thể xóa nó bằng lệnh git thông thường nhưng bạn sẽ cần thực hiện thêm các bước để xóa và tạo lại kho lưu trữ trên máy chủ và dọn dẹp mọi trang được lưu trong bộ nhớ cache.

2

Hãy thử đọc tài liệu cho git reset. Tôi không phải tất cả những người quen thuộc với Mercurial, nhưng nếu tôi hiểu chính xác this document, git reset sẽ cho phép bạn làm điều tương tự - nghĩa là, đặt lại kho lưu trữ của bạn về điểm trước đó trong lịch sử của nó.

This document thảo luận chi tiết một số chi tiết và this one thảo luận ngắn gọn về các tùy chọn khác nhau để sửa lỗi.

4

As larsks said, git reset --hard có thể giúp bạn quay lại lịch sử bạn muốn:

  1. Tìm giá trị sha chính xác bạn muốn quay lại sử dụng git log.
  2. Chạy git reset --hard sha để quay lại.
Các vấn đề liên quan