BIÊN TẬP:
Câu trả lời của tôi dưới đây các tài liệu một cách để hợp nhất master
thành aq
, nơi mà nếu bạn xem chi tiết của việc hợp nhất nó sẽ liệt kê những thay đổi được thực hiện trên aq
trước khi hợp nhất, không những thay đổi được thực hiện trênmaster
. Tôi đã nhận ra rằng đó có thể không phải là những gì bạn muốn, ngay cả khi bạn nghĩ đó là!
Chỉ:
git checkout aq
git merge master
Ổn.
Vâng, sự hợp nhất đơn giản này sẽ cho thấy rằng những thay đổi master
được thực hiện aq
tại thời điểm đó, chứ không phải theo cách khác; nhưng không sao - vì đó là điều đã xảy ra! Sau này, khi cuối cùng bạn hợp nhất chi nhánh của mình vào master
, đó là khi hợp nhất cuối cùng sẽ hiển thị tất cả các thay đổi của bạn như được thực hiện master
(đó chính xác là những gì bạn muốn và là cam kết nơi mọi người sẽ mong đợi tìm thấy thông tin đó bằng mọi cách).
Tôi đã kiểm tra và cách tiếp cận bên dưới cũng cho thấy chính xác các thay đổi tương tự (tất cả các thay đổi được thực hiện aq
kể từ khi phân tách ban đầu giữa aq
và master
) như cách tiếp cận thông thường ở trên, khi cuối cùng bạn hợp nhất mọi thứ lại master
. Vì vậy, tôi nghĩ rằng nhược điểm thực sự duy nhất của nó (ngoài việc quá phức tạp và không chuẩn ...: - /) là nếu bạn quay trở lại với những thay đổi gần đây git reset --hard HEAD~<n>
và điều này vượt qua sự hợp nhất, thì phiên bản bên dưới sẽ quay trở lại Chi nhánh 'sai' mà bạn phải sửa bằng tay (ví dụ: với git reflog
& git reset --hard [sha]
).
[Vì vậy, những gì tôi nghĩ trước đây là:]
Có một vấn đề với:
git checkout aq
git merge master
bởi vì những thay đổi được hiển thị trong cam kết hợp nhất (ví dụ: nếu bạn nhìn bây giờ hoặc sau này trong Github, Bitbucket hoặc trình xem lịch sử git địa phương yêu thích của bạn) là những thay đổi được thực hiện trên bản gốc, có thể không phải là điều bạn muốn.
Mặt khác
git checkout master
git merge aq
hiển thị các thay đổi được thực hiện trong aq, có thể là những gì bạn muốn. (Hoặc, ít nhất, đó thường là những gì tôi muốn!) Nhưng hợp nhất hiển thị các thay đổi đúng là ở nhánh sai!
Làm thế nào để đối phó?!
Toàn bộ quá trình, kết thúc bằng một cam kết hợp nhất hiển thị các thay đổi được thực hiện trên aq (theo hợp nhất thứ hai ở trên), nhưng với việc hợp nhất ảnh hưởng đến nhánh aq, là:
git checkout master
git merge aq
git checkout aq
git merge master
git checkout master
git reset --hard HEAD~1
git checkout aq
Điều này: hợp nhất aq với chủ, chuyển tiếp nhanh đó cùng hợp nhất với aq, hoàn tác nó trên chủ và đưa bạn trở lại aq một lần nữa!
Tôi cảm thấy như mình đang thiếu thứ gì đó - đây dường như là thứ bạn rõ ràng muốn và là thứ khó thực hiện.
Ngoài ra, rebase KHÔNG tương đương. Nó mất dấu thời gian và danh tính của các cam kết được thực hiện trên aq, đó cũng không phải là điều tôi muốn.