Git: Sửa một lỗi ảnh hưởng đến hai nhánh


16

Tôi đang dựa vào repo Git của mình trên một mô hình phân nhánh Git thành công và đang tự hỏi điều gì sẽ xảy ra nếu bạn gặp tình huống này:

nhập mô tả hình ảnh ở đây

Giả sử tôi đang phát triển trên hai nhánh tính năng A và B và B yêu cầu mã từ A. Nút X gây ra lỗi trong tính năng A ảnh hưởng đến nhánh B, nhưng điều này không được phát hiện tại nút Y nơi tính năng A và B được hợp nhất và thử nghiệm đã được tiến hành trước khi phân nhánh một lần nữa và làm việc trên lần lặp tiếp theo.

Do đó, lỗi được tìm thấy tại nút Z bởi những người làm việc trên tính năng B. Ở giai đoạn này, người ta đã quyết định rằng cần có một lỗi. Khắc phục sự cố này nên được áp dụng cho cả hai tính năng, vì những người làm việc trên tính năng A cũng cần sửa lỗi, vì đó là một phần của tính năng.

Có nên tạo một nhánh sửa lỗi từ tính năng mới nhất Một nút (một nhánh từ nút Y) và sau đó được hợp nhất với tính năng A không? Sau đó, cả hai tính năng được hợp nhất để phát triển lại và thử nghiệm trước khi phân nhánh?

Vấn đề với điều này là nó yêu cầu cả hai nhánh hợp nhất để khắc phục vấn đề. Vì tính năng B không có mã cảm ứng trong tính năng A, nên có cách nào để thay đổi lịch sử tại nút Y bằng cách thực hiện sửa lỗi và vẫn cho phép nhánh tính năng B vẫn chưa được trộn lẫn nhưng vẫn có mã cố định từ tính năng A?

Liên quan nhẹ: Quy ước phân nhánh lỗi Git


6
Bạn có thể sửa lỗi trong nhánh 'phát triển' và sau đó hợp nhất nó vào cả tính năng A và tính năng B không?
tdammers

Hmm, có vẻ như đó sẽ là tốt nhất. Có thể có xung đột hợp nhất trong tính năng A nhưng tôi nghĩ đó là điều không thể tránh khỏi ở đây.
Aram Kocharyan

Nếu bạn chưa thực hiện bất kỳ phát triển nào nữa trên nhánh 'phát triển' và lỗi không trùng lặp với bất kỳ thay đổi nào trong nhánh 'tính năng A', thì bạn sẽ không gặp phải bất kỳ xung đột nào.
tdammers

Câu trả lời:


24

Sử dụng một cam kết riêng biệt để sửa lỗi trong một nhánh, sau đó chọn cherry cam kết vào nhánh khác.


Điều đó làm việc tốt, chúc mừng.
Aram Kocharyan

5

Có thể cho rằng, không có lỗi trong A hoặc X. Khắc phục lỗi trong nhánh B nơi nó được tìm thấy. Bản sửa lỗi sẽ lan truyền đến X và A trong tiến trình bình thường của các sự kiện.


Cảm ơn, điều đó cũng khả thi miễn là lỗi không ảnh hưởng đến tính năng A.
Aram Kocharyan

0

Mặc dù không phải là một quy trình công việc phổ biến git, một quy trình công việc phổ biến trong Mercurial sẽ là cập nhật để sửa đổi X, sửa lỗi ở đó (như X2 ) và sau đó làm lại hợp nhất Y(sẽ là một cặp hợp nhất trong Mercurial).

Trong thực tế, công việc này sẽ dễ dàng hơn trong gitkể từ sau khi tất cả mọi người đã chuyển từ Ytới Y2 thì refs với bản gốc Ysẽ bị mất và nó cuối cùng sẽ được thu gom rác thải. Trong hgbạn sẽ phải tự gỡ bỏ những cam kết đó để dọn dẹp kho lưu trữ của bạn.

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.