Luồng Git - tạo nhánh tính năng từ một nhánh tính năng khác


85

Tôi đã được sử dụng git flowtrong một thời gian bây giờ. Tôi tò mò muốn tìm hiểu về một trường hợp sử dụng cụ thể.

Đối với một trong những dự án của tôi, tôi có vé cho một tính năng trang web mới. Vé này phụ thuộc vào nhiều nhiệm vụ phụ. Tôi muốn tạo một nhánh tính năng cho vé chính, sau đó đối với mỗi nhiệm vụ phụ, hãy tạo một nhánh tính năng ngoài nhánh tính năng mẹ.

Giả sử tôi có một vé PROJ-500 và tôi tạo một nhánh tính năng cho nó

git flow feature start PROJ-500

Sau đó, tôi muốn tích hợp vé PROJ-501thông qua PROJ-515vào PROJ-500trước tích hợp toàn bộ điều vào develop. Có cách nào để tôi làm điều gì đó như

git flow feature start PROJ-511 -b PROJ-500

Sau đó, theo thời gian các nhiệm vụ con này được hoàn thành và khi tính năng của chúng kết thúc, nhánh sẽ được hợp nhất vào PROJ-500.

git flow feature finish PROJ-511

Lệnh trên sẽ hợp nhất PROJ-511thànhPROJ-500

Và một khi tất cả các nhiệm vụ phụ được hoàn thành sau đó PROJ-500sẽ được kết thúc và hợp nhất vào develop.

Bằng cách này, tính năng trang web mới được tích hợp vào phát triển như một đơn vị duy nhất chứ không phải từng phần.


Điều này không làm điều đó? git flow feature start PROJ-511 PROJ-500? Liên kết bạn đã đăng trong nhận xét đến câu trả lời của DerekS cho thấy rằng điều đó nên làm.
Paul Hicks

Câu trả lời:


118

Bạn có thể tạo một nhánh tính năng phụ thông qua

git flow feature start PROJ-511 feature/PROJ-500

Nhưng bạn không thể sử dụng công cụ GitFlow để hợp nhất nhánh trở lại nhánh tính năng chính vì nếu bạn làm

git flow feature finish PROJ-511

tính năng sẽ được hợp nhất vào develop. Các tính năng phụ Ergo không được hỗ trợ , bạn cần thực hiện theo cách thủ công.

Các lựa chọn thay thế: Tuy nhiên, yêu cầu này không phải là mới. Có một vấn đề mở cũng như một dự án fork tuyên bố hỗ trợ hoàn thiện các tính năng thành các nhánh khác develop. Tôi cũng tìm thấy một yêu cầu kéo với việc triển khai tính năng đó. Bạn có thể muốn thử sửa đổi đó và xem bạn có hài lòng với nó không.


Cập nhật 2019-12-13: Như người dùng Matěj Kříž vừa đề cập trong nhận xét của mình, người dùng Tony Chemit đã viết câu trả lời ở đây vài tháng sau khi tôi viết, trỏ đến gitflow-avh như một giải pháp thay thế cho sản phẩm gitflow ban đầu. Nó hỗ trợ các tính năng phụ có sẵn với cú pháp hiển thị ở trên. Một số năm đã trôi qua và ngày nay phiên bản AVH là một phần của cài đặt thông thường của Git cho Windows, tôi vừa xác minh điều này trên hộp cục bộ của mình và thử nghiệm tùy chọn tính năng phụ. Tức là đối với người dùng Windows, nó chỉ hoạt động ngay sau khi cài đặt Git.


1
@pymarco: Cảm ơn bạn đã chấp nhận câu trả lời. Tuy nhiên, tôi rất tò mò: Bạn đã thử bất kỳ lựa chọn thay thế nào chưa? Nếu vậy, cái nào và kết quả là gì? Nó có hoạt động như mong đợi không? Có thể những người đọc khác có thể học được điều gì đó từ kinh nghiệm của bạn. :-)
kriegaex

Xin lỗi, nhưng tôi không có thời gian để quay lại việc này. Tôi sẽ thử vào một lúc nào đó.
pymarco

3
Tại sao lại ủng hộ? Phiếu phản đối được sử dụng cho các câu trả lời viết xấu, cẩu thả không có dấu hiệu của nỗ lực nghiên cứu hoặc kiến ​​thức. Dù sao cũng cảm ơn.
kriegaex

Nếu bạn sử dụng phiên bản gitflow-avh, hãy nhìn xuống stackoverflow.com/a/29353800/472611 @ tony-
chemit


11

Như đã đề cập, chúng ta có thể bắt đầu một tính năng mới bằng cách sử dụng bất kỳ nhánh cơ sở nào với

git flow feature start PROJ-511 feature/PROJ-500

Và để hoàn thành tính năng phụ, chúng tôi có thể tạm thời thay đổi cấu hình git flow để sử dụng nhánh tính năng của chúng tôi thay vì develop:

git flow config set develop feature/PROJ-500 && git flow feature finish PROJ-511

Bằng cách này, git flow chạy tất cả các lệnh và kiểm tra độ tỉnh táo. Cuối cùng, Để khôi phục cấu hình, chúng ta có thể chạy

git flow config set develop develop 

9

Cập nhật (ngày 5 tháng 11 năm 2020): Như đã lưu ý trong câu trả lời mới hơn ở đây , điều này có thể thực hiện được với gitflow-avh đã thay thế luồng git ban đầu.

===================

Câu trả lời gốc:

Tôi không nghĩ rằng có một phương pháp cho việc này trong git flow, nhưng nó khá đơn giản chỉ với git.

git checkout PROJ-500
git checkout -b PROJ-511
...do your PROJ-511 work...
git checkout PROJ-500
git merge PROJ-511
git branch -d PROJ-511

2
Cảm ơn Derek đã trả lời. Có, tôi có thể làm theo quy trình làm việc đó. Nhưng git flow đóng gói một số lệnh và kiểm tra sự tỉnh táo mà tôi muốn sử dụng để phát triển tính năng phụ. Ví dụ: đây là một liên kết đến git-flow-feature - github.com/nvie/gitflow/blob/develop/git-flow-feature
pymarco
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.