Sử dụng git, làm thế nào để tôi quay lại cam kết đầu tiên sau đó đi qua lịch sử?


7

Tôi đã nhân bản một dự án từ Github và bây giờ tôi muốn hoàn nguyên nó về cam kết đầu tiên, tôi sẽ làm điều này như thế nào? Ngoài ra, một khi tôi trở lại cam kết đầu tiên, làm thế nào để tôi đi đến cam kết thứ hai, và sau đó từ lần thứ hai đến lần thứ ba, v.v.


1
Sao y tại Stack Overflow: Git, Revert to a commit by SHA hash?
Bobby

@ BOB: Vâng, theo một cách nào đó, đó là một bản dupe, nhưng ứng dụng cụ thể trong trường hợp này thông qua mọi sửa đổi theo trình tự thời gian thì hơi khác một chút. Không nhiều, mặc dù.
Daniel Andersson

@DanielAndersson: Không thực sự, ít nhất là không theo ý kiến ​​của tôi. "Kiểm tra bản sửa đổi cụ thể" không khác nhiều so với "Kiểm tra bản sửa đổi cụ thể và sau đó kiểm tra bản sửa đổi tiếp theo". Mặc dù, biết về git logsẽ giúp ở đây.
Bobby

Tại sao bạn muốn làm điều đó?, bạn có thể giải thích những gì bạn đang cố gắng làm, thay vì những gì bạn muốn làm?
KurzingMetal

Câu trả lời:


7

Bạn có thể kiểm tra bất kỳ sửa đổi nào bằng cách cung cấp id SHA1 của nó:

git checkout <SHA1>

Một kịch bản trợ giúp được gọi git-walkđã được thực hiện cho điều này. Ngay cả khi bạn sẽ không sử dụng tập lệnh rõ ràng, hãy xem mã (rất đơn giản) để xem những gì được thực hiện.


1

Chuyển thể từ câu trả lời cho những gì trái ngược với git diff HEAD^? :

Trước tiên, để làm cho cuộc sống của bạn dễ dàng hơn sau này, bạn có thể thiết lập bí danh cục bộ để tìm cam kết ban đầu và con của một cam kết cụ thể (Lưu ý: điều này không phải lúc nào cũng có thể vì cách DAG hoạt động)

git config --local alias.first-sha "!git rev-list --all        | tail -n 1"
git config --local alias.child-sha "!git rev-list HEAD..master | tail -n 1"

Sau đó, bạn có thể kiểm tra cam kết ban đầu và bước qua mã bằng cách kiểm tra từng con-sha:

git checkout $(git first-sha)
git checkout $(git child-sha)

Nếu bạn chưa quen với git, tôi khuyên bạn nên đọc một bài viết tôi đã viết về Stepping Through Commits để biết thêm chi tiết về từng lệnh được sử dụng


0

cho tất cả các tệp, hãy thử

git show HEAD 

đối với một tệp cụ thể, hãy thử

git log -p filename
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.