2015-06-17 23 views
6

Tôi đã làm điều gì đó vô cùng ngu ngốc. Tôi đã nhập một mật khẩu trong mã của tôi và tôi đã đẩy mã trên nhánh chính. Tôi đã đẩy một vài lần sau đó để mọi người không kéo những thứ xấu, nhưng tôi vẫn có thể tìm thấy lời nguyền trong lịch sử cam kết.Git - Xóa cam kết khỏi lịch sử

Có cách nào để xóa cam kết khỏi lịch sử không? Chỉnh sửa: Tôi không muốn thêm tệp vào gitignore vì chúng tôi cần tệp đó.

Cảm ơn

+0

Vì vậy, đây là một gợi ý chính: Luôn kiểm tra các cam kết của bạn từng người một trước khi đẩy chúng. LUÔN LUÔN. – ckruczek

+0

có thể trùng lặp của [Loại bỏ các tệp nhạy cảm và các cam kết của chúng khỏi lịch sử Git] (http: // stackoverflow.com/questions/872565/remove-sensitive-files-and-their-commits-from-git-history) –

Trả lời

0

Không, Git chỉ thêm thay đổi vào lịch sử. Đọc this bài viết để biết thêm thông tin.

+4

Những điều đó không hoàn toàn chính xác. Bạn có thể xóa các cam kết nhưng điều này dẫn đến việc ghi lại lịch sử. – ckruczek

5

Khi bạn đẩy tới repo, bạn thực sự không muốn thay đổi lịch sử. Tuy nhiên, nếu bạn hoàn toàn chắc chắn rằng không ai đã lấy/lấy từ repo kể từ lần commit vi phạm của bạn, bạn có 2 tùy chọn.

Nếu bạn muốn xóa hoàn toàn cam kết (và mọi cam kết sau đó), hãy thực hiện git reset --hard ABC~ (giả sử băm của cam kết là ABC). Sau đó, hãy thực hiện git push -f.

Nếu bạn chỉ muốn chỉnh sửa cam kết đó và giữ nguyên các cam kết theo sau, hãy thực hiện git rebase -i ABC~. Thao tác này sẽ khởi chạy trình chỉnh sửa của bạn, hiển thị danh sách các cam kết của bạn, bắt đầu với các cam kết. Thay đổi cờ từ "chọn" thành "e", lưu tệp và đóng trình chỉnh sửa. Sau đó thực hiện các thay đổi cần thiết cho các tệp và thực hiện git commit -a --amend, sau đó thực hiện git rebase --continue. Theo dõi tất cả với một số git push -f.

Tôi muốn lặp lại, các tùy chọn này chỉ khả dụng cho bạn nếu không ai đã thực hiện việc kéo hoặc tìm nạp chứa cam kết vi phạm của bạn. Nếu họ có, thực hiện các bước này sẽ chỉ làm cho vấn đề tồi tệ hơn.

1

Nếu nó chỉ trên máy tính địa phương của bạn (hoặc không ai kiểm tra ra những thay đổi của bạn):

1) Sử dụng:

git log

để tìm các cam kết mà bạn muốn loại bỏ . Sao chép băm (sqeuence dài như: e8348ebe553102018c ...).

2) Sử dụng:

git rebase -i your_commit_hash_code_comes_here

Chỉ cần loại bỏ các cam kết bạn không cần và lưu các tập tin.

Rebit git tương tác có thể cho phép bạn cũng khắc phục cam kết bị hỏng - không cần phải xóa nó.

Nếu bạn đã đẩy các thay đổi cho máy chủ hoặc ai đó đã nhận được thay đổi của bạn - không bao giờ thay đổi lịch sử - nó sẽ gây ra các sự cố nghiêm trọng cho nhóm của bạn.

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