Tôi đang làm việc trên một dự án Rails quy mô lớn và nhóm tôi đang làm việc đang sử dụng Github để quản lý dự án. Trong khi nhiều thay đổi được thực hiện tại địa phương và sau đó được đẩy trực tiếp đến chi nhánh phát triển của chúng tôi, chúng tôi tạo một chi nhánh khi chúng tôi đang thực hiện một thay đổi rất lớn. Khi thời gian đến để hợp nhất nhánh đó trở lại phát triển, tôi thường cố gắng rebase phát triển trở lại vào nhánh tính năng của mình trước khi hợp nhất chi nhánh tính năng của mình vào phát triển (để ngăn việc ghi đè tác phẩm của người khác). Tôi thấy rằng khi tôi làm điều này, tôi dường như chạy vào cùng một cuộc xung đột hợp nhất hai lần. Tôi chạy vào một danh sách đầy đủ các xung đột trong khi rebasing, sau đó chạy vào cùng một danh sách các xung đột một lần nữa trong khi hợp nhất. Tôi có nên rebase phát triển thành chi nhánh tính năng của mình trước khi hợp nhất tính năng của mình vào phát triển hay tôi nên hợp nhất tính năng của mình vào phát triển?Khi tôi đang sử dụng Git, tôi có nên rebase trước khi hợp nhất không?
Giả sử nhánh tính năng của tôi được gọi là "new_feature". quá trình của tôi cho việc sáp nhập nó với "phát triển" nhánh đi như thế này:
git checkout develop
git pull (this is set up on our rig to always pull rebase)
git checkout new_feature
git rebase develop
(lots of merge conflicts ensue)
git checkout develop
git merge -no-ff new_feature
(same set of merge conflicts again)
Đó là, nếu như thời gian thay đổi từ rebase của tôi gây ra tính năng chi nhánh mới của tôi để loại gương phát triển tất cả các cách trở lại, và sau đó phát triển xung đột với bản sao psudo của chính nó.
lý do tại sao 'git merge -no-ff'? Nếu bạn vừa mới rebased new_feature vào phát triển, nó _should_ là một tiến nhanh. – Useless
Tôi thực sự không chắc chắn. Trong một thời gian, chúng tôi có một anh chàng ở đây thực sự biết Git, và anh ấy nói với tôi rằng tôi nên làm theo cách đó vì một lý do nào đó liên quan đến việc dọn dẹp thời gian. Tôi thực sự không biết lý do là gì. –
Tôi có thể thấy nó có thể làm cho dòng thời gian khó hiểu ... hmm. Việc rebase thay thế tất cả các commit trên 'new_feature' với các thay đổi tương đương được áp dụng cho' develop' thay vì điểm nhánh ban đầu, có nghĩa là bạn sẽ nhận được (bản sao) các commit cũ, có cha mẹ (giữa điểm nhánh ban đầu và 'phát triển/HEAD') cũ hơn chúng. – Useless