2012-06-29 29 views
10

Sau khi đọc bài viết này, nó làm cho tinh thần để rebase để thu thập những thay đổi từ các chi nhánh chính vào chi nhánh tính năng của tôi: Git workflow and rebase vs merge questionsGIT Rebase a Branch được cộng tác trên?

clone the remote repo 
git checkout -b my_new_feature 
..work and commit some stuff 
git rebase master 
..work and commit some stuff 
git rebase master 
..finish the feature 
git checkout master 
git merge my_new_feature 

này hoạt động tuyệt vời nếu các chi nhánh tính năng là địa phương để máy tính của tôi và tôi có thể viết lại lịch sử như tôi vui lòng.

Nhưng điều gì sẽ xảy ra nếu tôi cộng tác với người khác trên nhánh tính năng. Làm thế nào để chúng ta có được những thay đổi mới nhất từ ​​nhánh chính vào nhánh tính năng của chúng ta bây giờ chi nhánh tính năng của chúng ta được giữ trong kho lưu trữ từ xa?

Vì vậy, chúng tôi hợp nhất? Hoặc là có một phương pháp GIT slick để làm điều này?

Cảm ơn trước!

Trả lời

1

Nếu bạn đang làm việc một mình các lần rebases không làm gì cả. Bạn đã không cam kết bất cứ điều gì mới để làm chủ.

hợp nhất của bạn sẽ là một nhanh chóng chuyển tiếp hợp nhất và bạn có thể làm điều đó bằng cách không kiểm tra nó ra ở tất cả với

git push . HEAD:master 

Cho dù bạn đang làm việc với một người nào đó hay không, sáp nhập công việc đó là trong tổng thể vào tính năng của bạn nhánh là một thực hành không tốt. Nó được gọi là hợp nhất lại. Lý do mà nó là xấu là bây giờ bạn không có một mảnh nguyên tử của công việc. lịch sử của chủ bây giờ bị vướng víu với tính năng của bạn làm việc với tính năng này, chẳng hạn như rebasing, không thể trong nhiều tình huống.

Bạn cần suy nghĩ về chiến lược phân nhánh của mình và những gì bạn muốn đạt được. Dưới đây là của tôi:

http://dymitruk.com/blog/2012/02/05/branch-per-feature/

Bạn có thể thấy rằng mỗi chi nhánh bắt đầu từ cùng một vị trí. Bạn có một nhánh hội nhập riêng biệt và phát hành nhánh ứng cử viên để trộn và kết hợp các tính năng bạn muốn trong khi không làm ô nhiễm chúng.

Để cộng tác trên một tính năng với đồng nghiệp, điều đó phụ thuộc vào mức độ lớn của tính năng (mức độ chi tiết của công việc của bạn). Nếu nó lớn, bạn có thể áp dụng quy trình ở trên cho chính đối tượng địa lý và chi nhánh cho mỗi tác vụ thay thế.

Nếu đó là một tính năng nhỏ, bạn có thể hợp nhất hoặc rebase trên nhánh đó - nó sẽ không quan trọng nhiều. Tại thời điểm này nó đi xuống đến những gì đội bóng cảm thấy thoải mái.

+0

Dynmitruk: Cảm ơn bài đăng và liên kết. Từ liên kết, có vẻ như việc chọn lựa anh đào gần như là một giải pháp có sẵn. Cảm ơn bạn đã dành thời gian! –

2

Có giải pháp cho trường hợp của bạn mà không cần chuyển sang quy trình làm việc hoàn toàn khác.

Về việc sửa lỗi từ nhánh chính của bạn thành các chi nhánh, như bạn đã biết, tốt nhất là chọn cherry để chọn những cam kết cụ thể đó. Nhưng tôi thích có các chi nhánh chủ đề ngay cả đối với hotfix thay vì sửa chữa trong đường chính, theo cách đó tôi có thể hợp lý hợp nhất các bản sửa lỗi đó vào mọi tính năng bị chặn bởi chúng.

Để duy trì lịch sử phát triển tính năng càng sạch sẽ và tuyến tính càng tốt, tất cả cộng tác viên phải sử dụng git pull --rebase để nhận nội dung cập nhật để không có cam kết hợp nhất vô nghĩa nào xảy ra.

Nếu bạn vẫn muốn rebase một chi nhánh tính năng cộng tác qua chi nhánh phát triển chính hiện tại (để thử nghiệm tích hợp liên tục hoặc các mục đích khác) hoặc viết lại lịch sử của nó trong bất kỳ cách nào khác, bạn có thể làm điều đó một lần tính năng hoàn tất/thực hiện, chỉ cần trước khi hợp nhất với chi nhánh chính, nhưng bạn nên làm điều đó trong một chi nhánh riêng/riêng biệt mới riêng/địa phương.

Dưới đây là làm thế nào để tái tạo của bạn thay đổi trên chủ đề (skip cherry-picks) trong một chi nhánh mới từ thạc sĩ:

$ git checkout -b feature_final feature # jump to a new branch for grooming 
$ git rebase [-i] master    # rebase topic changes onto master 

Từ đó là tùy thuộc vào bạn phải làm gì với các chi nhánh rebased -push thượng nguồn cho QA hoặc trực tiếp hợp nhất để làm chủ (với --no-ff nếu bạn muốn làm cho nó rõ ràng trong lịch sử).

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