Các poster gốc nêu rõ:
Câu trả lời tốt nhất mà ai đó có thể cho tôi là sử dụng git revert
X lần cho đến khi tôi đạt được cam kết mong muốn.
Vì vậy, hãy nói rằng tôi muốn quay trở lại một cam kết cũ 20 lần, tôi phải chạy nó 20 lần.
Có cách nào dễ dàng hơn để làm điều này?
Tôi không thể sử dụng thiết lập lại vì repo này là công khai.
Không cần thiết phải sử dụng git revert
X lần. git revert
có thể chấp nhận một phạm vi cam kết làm đối số, vì vậy bạn chỉ cần sử dụng nó một lần để hoàn nguyên một phạm vi cam kết. Ví dụ: nếu bạn muốn hoàn nguyên 20 lần xác nhận cuối cùng:
git revert --no-edit HEAD~20..
Phạm vi cam kết HEAD~20..
là viết tắt của từ HEAD~20..HEAD
và có nghĩa là "bắt đầu từ cha mẹ thứ 20 của cam kết CHÍNH và hoàn nguyên tất cả các cam kết sau khi lên đến CHÍNH".
Điều đó sẽ hoàn nguyên 20 lần xác nhận cuối cùng, giả sử rằng không ai trong số đó là hợp nhất. Nếu có các xác nhận hợp nhất, thì bạn không thể hoàn nguyên tất cả chúng trong một lệnh, bạn sẽ cần hoàn nguyên chúng một cách riêng lẻ với
git revert -m 1 <merge-commit>
Cũng lưu ý rằng tôi đã thử nghiệm sử dụng một phạm vi với git revert
việc sử dụng git phiên bản 1.9.0. Nếu bạn đang sử dụng phiên bản cũ hơn của git, sử dụng phạm vi có git revert
thể có hoặc không hoạt động.
Trong trường hợp này, git revert
được ưa thích hơn git checkout
.
Lưu ý rằng không giống như câu trả lời được sử dụng nàygit checkout
, git revert
sẽ thực sự xóa bất kỳ tệp nào được thêm vào trong bất kỳ cam kết nào mà bạn hoàn nguyên , điều này làm cho cách này chính xác để hoàn nguyên một loạt các sửa đổi.
Tài liệu