Một cam kết lơ lửng là một cam kết không liên quan đến tham chiếu, tức là không có cách nào để đạt được nó.
Ví dụ, hãy xem xét sơ đồ dưới đây. Giả sử chúng ta xóa tính năng nhánhX mà không hợp nhất các thay đổi của nó, thì cam kết D sẽ trở thành một cam kết lơ lửng vì không có tham chiếu nào liên quan đến nó. Nếu nó đã được hợp nhất thành chủ, thì các tham chiếu CHÍNH và chính sẽ chỉ ra cam kết D và nó sẽ không còn nguy hiểm nữa, ngay cả khi chúng tôi đã xóa tính năngX. Đọc ghi chú sau sơ đồ để hiểu rõ hơn về điều này.
Git tự động thu gom rác (nghĩa là xử lý) cam kết treo lủng lẳng. Chúng ta có thể sử dụng git reflog
để khôi phục một nhánh (của các cam kết lơ lửng) đã bị xóa mà không hợp nhất nó. Chúng tôi chỉ có thể khôi phục các xác nhận đã xóa nếu nó có trong kho đối tượng cục bộ. Nếu đó là rác được thu thập, thì chúng ta không thể phục hồi nó.
LƯU Ý rằng một tên nhánh tức là nhãn nhánh thực sự là một tham chiếu đến cam kết mới nhất trên một nhánh tức là đầu nhánh. Trong sơ đồ trên, FeatureX, master và HEAD chỉ là các tham chiếu đến các cam kết cụ thể. nhãn FeatureX và master đề cập đến các cam kết mới nhất trên các nhánh tương ứng của chúng. Đầu thường nói đến đầu của nhánh hiện đang được kiểm tra (chủ trong trường hợp này). Nếu bạn kiểm tra một cam kết cũ hơn trên nhánh hiện tại của mình, thì HEAD sẽ ở trạng thái tách rời, nghĩa là nó sẽ trỏ đến cam kết cũ thay vì cam kết mới nhất. Cũng lưu ý rằng HEAD được gọi là một tham chiếu tượng trưng vì nó thực sự trỏ đến nhãn nhánh hiện tại và bất kỳ nhãn nhánh nào luôn luôn trỏ đến đỉnh của nhánh. Vì vậy, trong những trường hợp bình thường, CHÍNH gián tiếp chỉ ra cam kết mới nhất.
Bên cạnh đó, lưu ý rằng Git đại diện cho biểu đồ / lịch sử cam kết của nó dưới dạng biểu đồ chu kỳ có hướng . Mỗi cam kết có một tham chiếu đến nó cha mẹ. Do đó, các mũi tên trong một điểm sơ đồ cam kết từ cam kết con đến cam kết cha mẹ. Chúng tôi cần một tài liệu tham khảo cho cam kết con mới nhất để đạt được các cam kết cũ hơn trên một chi nhánh.
PS - Sơ đồ và sự hiểu biết ở trên được lấy từ khóa học miễn phí này . Mặc dù khóa học khá cũ, kiến thức vẫn có liên quan.
git gc
và 2) Tôi không cần phải lo lắng về điều này bởi vì các bit lơ lửng này là bình thường và git đã xử lý chúng?