Câu trả lời:
Sử dụng git checkout <sha1>
để kiểm tra một cam kết cụ thể.
git log
bây giờ chỉ hiển thị cam kết đầu tiên, tôi có thể tìm ra sha1 của lần xác nhận tiếp theo không?
git log --oneline
và dán đầu ra vào một tệp văn bản để tham khảo (các khoản tiền sha1 viết tắt mà nó cung cấp được đảm bảo là duy nhất). Một tùy chọn khác, nếu lịch sử của bạn là tuyến tính, là tìm hiểu có bao nhiêu cam kết từ lần cam kết đầu tiên cho đến khi master
sử dụng git checkout master~543
(nếu có 543 lần xác nhận), thì git checkout master~542
, v.v.
Để đi đến một phiên bản cụ thể / cam kết chạy các lệnh sau. HASH-CODE bạn có thể nhận được từgit log --oneline -n 10
git reset --hard HASH-CODE
Lưu ý - Sau khi đặt lại về phiên bản / cam kết cụ thể git pull --rebase
, bạn có thể chạy , nếu bạn muốn mang lại tất cả các cam kết bị loại bỏ.
reset
không chỉ kiểm tra một điểm cụ thể trong biểu đồ, nó cũng sẽ di chuyển chi nhánh hiện đang được kiểm tra của bạn
reset
, tất cả các thay đổi đang chờ xử lý của bạn sẽ bị loại bỏ.
git pull --rebase
chỉ hoạt động nếu bạn có một điều khiển từ xa cho repo của bạn và nó được cập nhật.
Bạn có thể có được một cái nhìn đồ họa về lịch sử dự án với các công cụ như gitk
. Chỉ cần chạy:
gitk --all
Nếu bạn muốn kiểm tra một chi nhánh cụ thể:
git checkout <branch name>
Đối với một cam kết cụ thể, sử dụng hàm băm SHA1 thay vì tên chi nhánh. (Xem Treeishes trong Sách cộng đồng Git , đây là một cuốn sách hay, để xem các tùy chọn khác để điều hướng cây của bạn.)
git log
có cả bộ tùy chọn để hiển thị lịch sử chi tiết hoặc tóm tắt.
Tôi không biết một cách dễ dàng để tiến lên trong lịch sử cam kết. Các dự án với một lịch sử tuyến tính có lẽ không phải là tất cả phổ biến. Ý tưởng về "sửa đổi" như bạn có với SVN hoặc CVS không ánh xạ tất cả những điều đó trong Git.
Sử dụng khóa SHA1 của một cam kết, bạn có thể làm như sau:
Đầu tiên, tìm cam kết bạn muốn cho một tệp cụ thể:
git log -n <# commits> <file-name>
Điều này, dựa trên của bạn <# commits>
, sẽ tạo ra một danh sách các cam kết cho một tệp cụ thể.
MIPO: nếu bạn không chắc chắn những gì bạn đang tìm kiếm, một cách tốt để tìm hiểu là sử dụng lệnh sau : git diff <commit-SHA1>..HEAD <file-name>
. Lệnh này sẽ hiển thị sự khác biệt giữa phiên bản hiện tại của một cam kết và một phiên bản trước đó của một cam kết cho một tệp cụ thể.
LƯU Ý: khóa SHA1 của một cam kết được định dạng trong git log -n
danh sách là:
cam kết
<SHA1 id>
Thứ hai, kiểm tra phiên bản mong muốn:
Nếu bạn đã tìm thấy cam kết / phiên bản mong muốn mà bạn muốn, chỉ cần sử dụng lệnh: git checkout <desired-SHA1> <file-name>
Điều này sẽ đặt phiên bản của tệp bạn đã chỉ định trong khu vực tổ chức. Để đưa nó ra khỏi khu vực tổ chức, chỉ cần sử dụng lệnh:reset HEAD <file-name>
Để trở lại nơi lưu trữ từ xa được trỏ đến, chỉ cần sử dụng lệnh: git checkout HEAD <file-name>
Tôi đã ở trong một tình huống mà chúng tôi có một nhánh chính, và sau đó một nhánh khác gọi là 17.0 và bên trong 17.0 này có một hàm băm cam kết không nói "XYZ" . Và khách hàng được cung cấp bản dựng cho đến khi sửa đổi XYZ. Bây giờ chúng tôi đã gặp một lỗi và cần phải giải quyết cho khách hàng đó. Vì vậy, chúng ta cần tạo chi nhánh riêng cho khách hàng đó cho đến khi băm "xyz" đó. Vì vậy, đây là cách tôi đã làm nó.
Đầu tiên tôi tạo một thư mục có tên khách hàng đó trên máy cục bộ của mình. Giả sử tên khách hàng là "AAA" khi thư mục đó được tạo ra theo lệnh bên trong thư mục này:
Một cách sẽ là tạo ra tất cả các cam kết từng được thực hiện cho các bản vá. kiểm tra các cam kết ban đầu và sau đó áp dụng các bản vá theo thứ tự sau khi đọc.
sử dụng git format-patch <initial revision>
và sau đó git checkout <initial revision>
. bạn sẽ nhận được một đống tệp trong giám đốc của mình bắt đầu bằng bốn chữ số là các bản vá.
Khi bạn đọc xong bản sửa đổi của bạn, hãy làm những gì git apply <filename>
sẽ giống
git apply 0001-*
và đếm.
Nhưng tôi thực sự tự hỏi tại sao bạn chỉ muốn đọc các bản vá thay thế? Xin vui lòng gửi điều này trong ý kiến của bạn bởi vì tôi tò mò.
hướng dẫn git cũng cho tôi điều này:
git show next~10:Documentation/README
Hiển thị nội dung của tệp Tài liệu / README như chúng hiện tại trong lần cam kết cuối cùng thứ 10 của chi nhánh tiếp theo.
bạn cũng có thể có một cái nhìn trong git blame filename
đó cung cấp cho bạn một danh sách trong đó mỗi dòng được liên kết với một tác giả hash + tác giả.
Để có được một mã cam kết cụ thể, bạn cần mã băm của cam kết đó. Bạn có thể lấy mã băm đó theo hai cách:
git log
và kiểm tra các cam kết gần đây của bạn trên chi nhánh đó. Nó sẽ hiển thị cho bạn mã băm của cam kết của bạn và thông báo bạn đã gửi trong khi bạn đang thực hiện mã của mình. Chỉ cần sao chép và sau đó làmgit checkout commit_hash_code
Sau khi chuyển sang mã đó, nếu bạn muốn làm việc với nó và thực hiện các thay đổi, bạn nên tạo một nhánh khác với git checkout -b <new-branch-name>
, nếu không, các thay đổi sẽ không được giữ lại.
git log -n1
. Nhưng trừ khigit checkout
thất bại, đó là một sự lãng phí nỗ lực.