Trong trường hợp này, tình huống là có một cam kết chưa được làm sạch ở đầu chi nhánh master
trong một bản sao của kho lưu trữ. Sau đó, git pull
được chạy nhiều lần trong cùng một kho lưu trữ, trong một khoảng thời gian khi có rất nhiều công việc mới đang được thực hiện ngược dòng. (Trong trường hợp này, nó xảy ra vì một kịch bản tự động, nhưng điều tương tự có thể xảy ra nếu một nhà phát triển chỉ kéo liên tục vào một chi nhánh để giữ cho nó cập nhật, thay vì, nói, rebasing.)
Mỗi lần kéo khi có các cam kết mới ở trên luồng tạo ra một cam kết hợp nhất mới, vì luôn có một cam kết trong master
không nằm trong số master
ngược dòng. Cuối cùng, lịch sử từ nhánh chính trong kho lưu trữ này đã được đẩy lên thượng nguồn, vì vậy các nhà phát triển khác đã thấy cấu trúc này trong đồ thị cam kết đột nhiên xuất hiện khi chúng được kéo tiếp từ kho lưu trữ ngược dòng.
Nếu bạn có lịch sử với cấu trúc tương tự và muốn tìm hiểu xem nhà phát triển nào đã gây ra sự cố này, bạn có thể chỉ cần nhìn xuống dòng với các ngôi sao (về cơ bản sau cha mẹ đầu tiên của mỗi lần hợp nhất) cho đến khi bạn nhận được cam kết không hợp nhất đầu tiên. Trong trường hợp trong hình, đó là b275805
- cam kết đáng lẽ phải được đẩy trước đó.
Đây là một trong những lý do mà mọi người thường thích sử dụng git pull --rebase
- nó giữ lịch sử chưa được làm sạch của bạn đơn giản.
Để cung cấp tín dụng khi đến hạn, đồng nghiệp của tôi Matthew Somerville phát hiện ra điều này và tìm ra những gì đang diễn ra.
Nguồn
2012-12-24 16:25:16
* "Sắp tới: tại sao cây của tôi trông giống như cây thông Noel?" * – Amber
* "Sắp tới: tại sao cây Giáng sinh của tôi trông giống như một lịch sử git?" * –
Cây Giáng sinh sẽ không hoàn thành mà không có một số ngôi sao ... '*' '*' '*' – ADTC