Bạn hợp nhất. Điều đó thực sự khá đơn giản và một hoạt động hoàn toàn cục bộ:
git checkout b1
git merge master
# repeat for b2 and b3
Điều này để lại lịch sử chính xác như nó đã xảy ra: Bạn rẽ nhánh từ chủ, bạn đã thực hiện thay đổi cho tất cả các chi nhánh và cuối cùng bạn kết hợp các thay đổi từ chủ vào cả ba nhánh.
git
có thể xử lý tình huống này thực sự tốt, nó được thiết kế để hợp nhất xảy ra theo mọi hướng, cùng một lúc. Bạn có thể tin tưởng rằng nó có thể có được tất cả các chủ đề với nhau một cách chính xác. Nó chỉ đơn giản là không quan tâm đến việc b1
hợp nhất chi nhánh master
, hoặc master
hợp nhất b1
, cam kết hợp nhất trông giống như git. Sự khác biệt duy nhất là, nhánh nào kết thúc chỉ vào cam kết hợp nhất này.
Bạn nổi loạn. Những người có SVN hoặc nền tương tự tìm thấy điều này trực quan hơn. Các lệnh tương tự như trường hợp hợp nhất:
git checkout b1
git rebase master
# repeat for b2 and b3
Mọi người thích cách tiếp cận này vì nó giữ lại một lịch sử tuyến tính trong tất cả các chi nhánh. Tuy nhiên, lịch sử tuyến tính này là một lời nói dối, và bạn nên biết rằng nó là. Xem xét biểu đồ cam kết này:
A --- B --- C --- D <-- master
\
\-- E --- F --- G <-- b1
Kết quả hợp nhất trong lịch sử thực sự:
A --- B --- C --- D <-- master
\ \
\-- E --- F --- G +-- H <-- b1
Cuộc nổi loạn, tuy nhiên, cung cấp cho bạn lịch sử này:
A --- B --- C --- D <-- master
\
\-- E' --- F' --- G' <-- b1
Vấn đề là, rằng các cam kết E'
, F'
và G'
không bao giờ thực sự tồn tại, và đã có thể không bao giờ được thử nghiệm. Họ thậm chí có thể không biên dịch. Thực sự khá dễ dàng để tạo ra các cam kết vô nghĩa thông qua một rebase, đặc biệt là khi những thay đổi master
quan trọng đối với sự phát triển trong b1
.
Hậu quả của việc này có thể được, mà bạn không thể phân biệt đó trong ba cam kết E
, F
và G
thực sự đã giới thiệu một hồi quy, giảm dần giá trị của git bisect
.
Tôi không nói rằng bạn không nên sử dụng git rebase
. Nó có công dụng của nó. Nhưng bất cứ khi nào bạn sử dụng nó, bạn cần phải nhận thức được thực tế rằng bạn đang nói dối về lịch sử. Và ít nhất bạn nên biên dịch thử nghiệm các cam kết mới.