Vì vậy, hãy tưởng tượng những điều sau đây xảy ra (và tất cả chúng ta đều sử dụng SourceTree):
- Tất cả chúng ta đang làm việc không có nguồn gốc / phát triển.
- Tôi đi nghỉ một tuần.
- Đồng nghiệp của tôi đã làm việc tại địa phương trong nhiều ngày qua mà không hợp nhất nguồn gốc / phát triển trở lại chi nhánh phát triển địa phương của anh ấy.
- Anh ta cố gắng thực hiện một cú đẩy, được bảo rằng anh ta phải hợp nhất trước, và sau đó thực hiện một cú kéo.
- Anh ta nhận được một cuộc xung đột, ngăn chặn việc cam kết tự động sau khi hợp nhất tiến hành.
- Giả sử rằng Git giống như SVN, đồng nghiệp của tôi loại bỏ các tệp "mới" trong bản sao làm việc của anh ấy và sau đó cam kết hợp nhất - xóa sạch các tệp "mới" đó khỏi phần gốc / phát triển.
- Một tuần làm việc đáng giá của nhà phát triển diễn ra trên bản sửa đổi đó.
- Tôi trở về từ ngày lễ và phát hiện ra rằng một vài ngày làm việc của tôi bị mất tích.
Tất cả chúng ta đều rất mới với Git (đây là dự án đầu tiên của chúng tôi sử dụng nó), nhưng những gì tôi đã làm để khắc phục nó là:
- Đổi tên "phát triển" thành "Develop_old".
- Hợp nhất Develop_old thành một nhánh mới "Develop_new".
- Đặt lại nhánh Develop_new về lần xác nhận cuối cùng trước khi hợp nhất xấu.
- Cherry chọn từng cam kết kể từ đó, từng người một, giải quyết xung đột bằng tay.
- Đẩy Develop_old và Develop_new lên đến điểm gốc.
Tại thời điểm này, Develop_new, tôi hy vọng, một bản sao "tốt" của tất cả các thay đổi của chúng tôi với giá trị công việc trong những tuần tiếp theo được áp dụng lại. Tôi cũng giả định rằng "ngược cam kết" sẽ làm những điều kỳ lạ về một hợp nhất, đặc biệt là từ vài tuần tới giá trị của tác phẩm dựa vào nó - và kể từ khi hợp nhất có chứa rất nhiều thứ chúng tôi làm muốn cùng với các công cụ chúng tôi don' t.
Tôi hy vọng rằng điều này sẽ không bao giờ xảy ra nữa, nhưng nếu nó xảy ra một lần nữa, tôi muốn biết về một cách dễ dàng hơn / tốt hơn để sửa chữa mọi thứ. Có cách nào tốt hơn để hoàn tác một sự hợp nhất "xấu", khi rất nhiều công việc đã diễn ra trong repo dựa trên sự hợp nhất đó?
git log
định dạng yêu thích của bạn với các chú thích thích hợp về những gì đã xảy ra ở các cam kết khác nhau không? (Tôi sắp xếp lại / chú thíchgit log --graph --pretty=oneline --abbrev-commit
và đi từ đó)