Bạn thực sự nên có một quy trình làm việc cho phép bạn làm tất cả điều này bằng cách hợp nhất:
- x - x - x (v2) - x - x - x (v2.1)
\
x - x - x (wss)
Vì vậy, tất cả bạn phải làm là git checkout v2.1
và git merge wss
. Nếu vì một lý do nào đó bạn thực sự không thể làm điều này và bạn không thể sử dụng git rebase để di chuyển nhánh wss của mình đến đúng nơi, lệnh lấy một cam kết duy nhất từ một nơi nào đó và áp dụng nó ở nơi khác là git cherry-pick . Chỉ cần kiểm tra chi nhánh bạn muốn áp dụng nó và chạy git cherry-pick <SHA of commit to cherry-pick>
.
Một số cách rebase có thể cứu bạn:
Nếu lịch sử của bạn trông như thế này:
- x - x - x (v2) - x - x - x (v2.1)
\
x - x - x (v2-only) - x - x - x (wss)
Bạn có thể sử dụng git rebase --onto v2 v2-only wss
để di chuyển wss trực tiếp lên v2:
- x - x - x (v2) - x - x - x (v2.1)
|\
| x - x - x (v2-only)
\
x - x - x (wss)
Sau đó, bạn có thể hợp nhất! Nếu bạn thực sự, thực sự, thực sự không thể đến điểm mà bạn có thể hợp nhất, bạn vẫn có thể sử dụng rebase để thực hiện một số hiệu quả một vài quả anh đào cùng một lúc:
# wss-starting-point is the SHA1/branch immediately before the first commit to rebase
git branch wss-to-rebase wss
git rebase --onto v2.1 wss-starting-point wss-to-rebase
git checkout v2.1
git merge wss-to-rebase
Lưu ý: lý do cần một số công việc bổ sung để thực hiện việc này là vì nó tạo ra các cam kết trùng lặp trong kho lưu trữ của bạn. Đây thực sự không phải là một điều tốt - toàn bộ vấn đề dễ dàng phân nhánh và hợp nhất là có thể thực hiện mọi thứ bằng cách thực hiện một (các) cam kết và sáp nhập chúng vào bất cứ nơi nào chúng cần. Cam kết trùng lặp có nghĩa là một ý định không bao giờ hợp nhất hai nhánh đó (nếu bạn quyết định bạn muốn sau này, bạn sẽ gặp xung đột).