2009-10-28 26 views
9

Nhóm của chúng tôi sử dụng luồng công việc git thuần túy hợp nhất và chúng tôi đang thảo luận về khả năng yêu cầu tất cả các thành viên trong nhóm đẩy tất cả công việc lên máy chủ vào một buổi chiều một buổi tối rebasing repo máy chủ.Tự động viết lại toàn bộ lịch sử git để loại bỏ các cam kết hợp nhất đơn giản

Tôi (nghĩ) những gì tôi muốn làm tự động là miễn là tất cả các cam kết chỉ trên cùng một tập hợp các nhánh và số lượng cam kết song song dưới một ngưỡng nhất định, tôi muốn rebase chuỗi và loại bỏ (các) commit hợp nhất. Nhưng tôi mở để gợi ý?

Bất kỳ ai biết cách thực hiện việc này?

Trả lời

12

Theo tôi, bạn nên tránh sự cám dỗ để viết lại lịch sử chỉ để làm cho nó "trông đẹp". Có thực sự là không có điểm. Lịch sử, như nó là, là một đại diện chính xác hơn về thực tế và các công cụ báo cáo của git tất cả được thiết kế để có ích ngay cả với rất nhiều hợp nhất nhỏ.

Nếu bạn không muốn xem nhiều lần hợp nhất, bạn có thể chặn chúng khỏi nhiều tác vụ báo cáo, ví dụ:

git log --no-merges 

Những gì bạn đang đề xuất (một buổi tối của rebasing, có lẽ gây ra tất cả các nhà phát triển phải reset) có vẻ như tạo công việc vì lợi ích của công việc.

+1

+1 để tập trung tốt - "thực tế cắn". Git cung cấp một không gian công cụ khổng lồ và rất nhiều lựa chọn, nó có thể khó để biết những gì thông minh và những gì không. Tôi tin tưởng vào việc không tạo ra công việc vì lợi ích của công việc, vì vậy tôi có lẽ sẽ gắn bó với lời khuyên của bạn. – krosenvold

5

Tôi không chắc chắn điều này có thể đơn giản như thế nào. Nếu bạn thực hiện một rebase -i, nó sẽ cố gắng bỏ qua tất cả các hợp nhất, thành công để hợp nhất mà không có xung đột, nhưng dừng lại và đợi bạn nếu có xung đột.

Nếu bạn gọi nó là rebase -i -p, mặt khác, nó sẽ duy trì việc hợp nhất, đó là những gì bạn muốn khi người dùng thực hiện hợp nhất thực sự, nhưng hoàn toàn bỏ lỡ điểm khác.

Có lẽ một số trình tự của hai lệnh, duy trì việc hợp nhất chỉ khi bạn muốn, có thể hoàn thành công việc trong trường hợp này.

Tôi phải đồng ý với Charles, mặc dù, có lịch sử phản ánh thực tế có giá trị hơn nhiều so với làm cho nó "trông khá". Thực tế là, một cam kết đã được thực hiện mà không có kiến ​​thức của người khác, và trong trường hợp của mã nguồn này có thể cho bạn biết lý do tại sao một cái gì đó có thể đã đi sai.

Nhóm chúng tôi sử dụng một git công việc hoàn toàn hợp nhất dựa trên

Có gì sai với luôn kéo với --rebase (ví dụ git pull -r)? Nếu bạn muốn một cấu trúc liên kết phẳng, cách đơn giản nhất là không hợp nhất khi bạn có thể rebase.

Ngoài ra: bạn nói bạn chỉ muốn làm phẳng nếu "hợp nhất sạch". Tôi chỉ đang suy đoán ở đây, nhưng tôi không nghĩ rằng git ghi lại các xung đột sau khi sự kiện khác với một lưu ý trong thông báo cam kết mặc định, mà có thể không còn ở đó.

+1

+1 để kéo bằng --rebase. – mskfisher

Các vấn đề liên quan