Interactive rebase là bạn của bạn!
Như những người khác đã nói:
$ git rebase -i HEAD~5
... nơi -i
là lá cờ tương tác, và HEAD~5
phương tiện bao gồm 5 cam kết cuối cùng trong rebase tương tác.
Khi bạn nhận được biên tập lên như là kết quả của việc ban hành trên, hãy nhìn vào những nhận xét trong file mở:
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
Các bit chìa khóa cho bạn là Nếu bạn loại bỏ một dòng ở đây RẰNG COMMIT SẼ BỊ MẤT.
Vì vậy, hãy xóa các dòng tham chiếu các cam kết bạn muốn loại bỏ, lưu và đóng, và git sẽ xử lý phần còn lại (bạn có thể phải khắc phục một số xung đột tùy thuộc vào tính chất của cam kết và hoàn nguyên bạn đang cố xoá). Điều quan trọng cần lưu ý là nếu bạn đã đẩy mã của bạn và những người khác đã kéo nó, thì ở trên sẽ không hoạt động vì các cam kết sẽ tìm đường trở lại trong lần sau khi ai đó đã kiểm tra chi nhánh của bạn . Việc rebase tương tác xóa các cam kết trong phạm vi mà không có bản ghi của chúng, do đó, các bản sao khác không biết chúng đã bị xóa. Lần sau khi họ push, họ sẽ cố gắng và tái instate chúng như là các bản sao cục bộ "thấy" rằng nguồn gốc không có các đối tượng (cam kết) mà bạn đã xóa.
thể trùng lặp của [Git: Xóa lựa chọn cam kết mục log cho một kho lưu trữ] (http://stackoverflow.com/questions/495345/git-removing-selected-commit-log-entries-for- a-kho lưu trữ) – jszakmeister
@jszakmeister: Không hoàn toàn giống nhau, bài đăng được liên kết muốn xóa bí mật, trong khi OP muốn ở đây để xóa chúng – CharlesB
@CharlesB Không hoàn toàn đúng. Squashing B và C là một lựa chọn, và do đó đã loại bỏ các cam kết trong câu hỏi của OP. Câu trả lời chứa các chỉ dẫn trên cả hai. – jszakmeister