Có cách nào để xóa tất cả các cam kết trước một cam kết được chỉ định và sử dụng cam kết đó làm ký tự ban đầu không?Xóa cam kết trước cam kết cụ thể
Trả lời
Hãy nói rằng mới lâu đời nhất cam kết của băm là X và chúng ta có thể sử dụng "oldroot" và "newroot" tạm thời:
git checkout -b oldroot X
TREE=`git write-tree`
COMMIT=`echo "Killed history" | git commit-tree "$TREE"`
git checkout -b newroot "$COMMIT"
git rebase --onto newroot oldroot master
# repeat for other branches than master that should use the new initial commit
git checkout master
git branch -D oldroot
git branch -D newroot
git gC# WARNING: if everything's done right, this will actually delete your history from the repo!
Điều đó sẽ tạo ra một 'newroot' cam kết với nội dung tương tự như 'oldroot' cam kết, nhưng không có cha mẹ. Sau đó, nó sẽ hồi sinh tất cả các nhánh khác trên gốc mới, mà nên có trong lịch sử của tất cả chúng.
CHỈNH SỬA: đã kiểm tra và cố định; hơi muộn, tinh chế một chút
Lưu ý rằng "Lịch sử bị giết" trở thành thông báo cam kết mới cho lần commit đầu tiên. Nếu bạn muốn một cái gì đó khác, như tin nhắn ban đầu ví dụ, chỉ cần ống nó trong đó. –
Các giải pháp dễ dàng hơn sẽ, xem xét ban đầu chi nhánh của bạn có cam kết chính và bạn đã làm một cam kết đầu tiên, bây giờ bạn cũng đã một cam kết thứ hai trên đầu trang của đầu tiên. Vì vậy, bạn có một cái gì đó như:
main->first->second
Bây giờ bạn muốn có thứ hai trên đầu trang của chính chứ không phải trên đầu trang của đầu tiên. Một cái gì đó như:
main->second->first or main->second
Bạn chỉ có thể làm,
git rebase -i main
này sẽ cung cấp cho bạn một vỏ tương tác, nơi bạn có thể sắp xếp lại thứ tự của các cam kết hoặc loại bỏ bất kỳ cam kết của sự lựa chọn của bạn.
- 1. Xem một Git cụ thể cam kết
- 2. Git: truy xuất cam kết cụ thể
- 3. SVN Cam kết các tệp cụ thể
- 4. Hợp nhất một cam kết cụ thể
- 5. Xóa git cũ cam kết
- 6. Dừng một git cam kết bởi một tác giả cụ thể bằng cách sử dụng móc trước cam kết
- 7. Subversion: Cách xem trước cam kết?
- 8. Thêm tệp vào SVN rồi xóa trước cam kết
- 9. tôi có thể xóa các cam kết cũ không?
- 10. xem xét mã trước cam kết
- 11. Xóa cam kết git chưa được đẩy
- 12. Khôi phục cam kết git trước đó?
- 13. Hg: xóa mới nhất cam kết
- 14. Xấu cam kết Git
- 15. git: squash/fixup trước đó cam kết
- 16. Git ký tắt cam kết trước đó?
- 17. thiết lập trước cam kết móc jshint
- 18. Biết mã GIT trước khi cam kết?
- 19. Tôi có thể xóa một cam kết trong Subversion không?
- 20. Sửa đổi một cam kết đó không phải là trước đó cam kết
- 21. xóa cam kết git đầu tiên
- 22. Xóa lịch sử cam kết Github
- 23. Xóa tất cả các cam kết trong một chi nhánh sau khi cam kết nhất định
- 24. SVN cam kết Lỗi "Cam kết chỉ có thể cam kết vào một kho lưu trữ tại một thời điểm."
- 25. Subversion: Cách hợp nhất một cam kết cụ thể
- 26. Tìm thông tin thẻ cho một cam kết cụ thể
- 27. Tìm cam kết đầu tiên cụ thể cho chi nhánh
- 28. git look cam kết đăng nhập cho cam kết id
- 29. Force django cam kết
- 30. Hai pha cam kết
Tôi biết tôi đã xem hướng dẫn ở đâu đó để làm điều gì đó như thế này ... Nó cho thấy cách bạn có thể giữ một repo lịch sử kết thúc tại cam kết X, và sau đó cam kết X lên đến HEAD và tạo một repo mới từ họ, với chú thích trên X về cách truy cập vào kho lưu trữ lịch sử. Tôi không thể tìm thấy nó ngay bây giờ, nhưng có thể. – Daenyth