Nếu bạn có chi nhánh hỗ trợ nơi bạn sửa lỗi và tạo phiên bản mới. Về chủ, bạn có phiên bản tiếp theo, nơi bạn cũng xây dựng các phiên bản mới thường xuyên.
Mỗi khi bạn tạo phiên bản mới, bạn thay đổi phiên bản trong một số tệp, hãy cam kết tệp mới đó, tạo thẻ và đẩy. Giờ đây, việc hợp nhất từ hỗ trợ thành master sẽ luôn có xung đột trong tệp chứa thông tin phiên bản.
Nếu tệp chứa thông tin phiên bản chỉ chứa thông tin phiên bản, bạn có thể đi với câu trả lời của fcurella. Nhưng nếu nó thực sự cũng có thể chứa thông tin hợp nhất (pom.xml, gradle.properties, MANIFEST.MF, ...), bạn phải thực hiện thêm một số hành động.
Cho phép sử dụng các ví dụ sau
C---D*---E---F* support
/
A---B---G---H*---I master
nơi cam kết với các ngôi sao chỉ chứa các thay đổi do sự thay đổi phiên bản đó nên bỏ qua trong quá trình hợp nhất.
Để nhập hỗ trợ vào chủ mà không merge-mâu thuẫn do phiên bản xây dựng, bạn có thể làm một trong hai điều sau đây:
Nhiều merge cam
git checkout master
git merge C
git merge D -s ours
git merge E
git merge F -s ours
Với lập luận -s ours
chúng tôi đang nói git chỉ ghi lại một hợp nhất mà không thay đổi không gian làm việc. Điều này có thể so sánh được to the --record-only
option of svn.
trên sẽ dẫn đến việc bố trí sau
-------------C---D*---E---F* support
/ \ \ \ \
A---B---G---H*---I---J---K----L---M master
Một hợp nhất cam kết sử dụng cherry-chọn
git checkout master
git merge support -s ours --no-commit
git cherry-pick C E --no-commit
git commit -m 'merged support into master'
đầu tiên chúng tôi đang bắt đầu một hợp nhất nhưng chỉ ghi lại rằng chúng ta đang sáp nhập, mà không thay đổi không gian làm việc và không thực hiện cam kết hợp nhất. Sau đó, chúng tôi sẽ chọn các cam kết hợp nhất, một lần nữa mà không cần cam kết. Cuối cùng, chúng tôi cam kết hợp nhất.
trên sẽ dẫn đến việc bố trí sau
C---D*---E---F* support
/ \
A---B---G---H*---I---J master
Một thậm chí có thể tự động hóa việc cherry-hái.
git checkout master
git merge support -s ours --no-commit
for id in `git log support --reverse --not HEAD --format="%H [%an] %s" |
grep -v "bump version" |
sed "s/\(\w*\)\s.*/\1/g"`
do
git cherry-pick --no-commit $id
done
git commit -m 'merged support into master'
Có thể trùng lặp [git - bỏ qua các cam kết cụ thể khi hợp nhất] (https://stackoverflow.com/questions/727994/git-skipping-specific-commits-when-merging) - Tôi biết đó là trẻ hơn, nhưng [ câu trả lời được chấp nhận] (https://stackoverflow.com/a/729723/321973) là IMHO tốt hơn –