Khi bị hack, bạn có thể thử sửa đổi công thức để so sánh các cam kết trong hai kho lưu trữ khác nhau trên trang GitTips , tức là:
GIT_ALTERNATE_OBJECT_DIRECTORIES=../repo/.git/objects \
git cherry-pick $(git --git-dir=../repo/.git rev-parse --verify <commit>)
đâu ../repo
là đường dẫn đến kho lưu trữ khác.
Với Git hiện đại, bạn có thể sử dụng nhiều bản sửa đổi và phạm vi sửa đổi với cherry-pick .
Ở $(git --git-dir=../repo/.git rev-parse --verify <commit>)
đây là để dịch <commit>
(ví dụ HEAD
, hoặc v0.2
, hoặc master~2
, là các giá trị trong kho lưu trữ thứ hai mà bạn sao chép từ đó) sang định danh SHA-1 của cam kết. Nếu bạn biết SHA-1 của một thay đổi mà bạn muốn chọn, thì không cần thiết.
Tuy nhiên, LƯU Ý rằng Git có thể bỏ qua việc sao chép các đối tượng từ kho lưu trữ nguồn, vì nó không biết rằng kho lưu trữ đối tượng thay thế chỉ là tạm thời, cho một hoạt động. Bạn có thể cần sao chép các đối tượng từ kho thứ hai với:
GIT_ALTERNATE_OBJECT_DIRECTORIES=../repo/.git/objects git repack -a -d -f
Điều này đặt những đối tượng được mượn từ kho thứ hai vào kho lưu trữ gốc
Không được thử nghiệm.
Một giải pháp không quá hack là làm theo câu trả lời của trang :
- Chuyển đến kho lưu trữ thứ hai mà bạn muốn sao chép các cam kết và tạo các bản vá từ các cam kết mà bạn muốn
git format-patch
- Theo tùy chọn, sao chép các bản vá (0001- *, v.v.) vào kho lưu trữ của bạn
- Sử dụng
git am --3way
để áp dụng các bản vá lỗi