Tôi không chắc chắn những gì repo của bạn trông như thế nào nhưng đây là trường hợp xấu nhất.
Giả kho origin
của bạn trông như thế này
origin:
o---o---A---B---C master
Và kho địa phương của bạn trông như thế này,
JimPuls:
o---o---A---B---C master, origin/master
\
D---E---F topic1
Sau đó, sau khi chi nhánh của bạn đổi tên kho địa phương của bạn trông như thế này:
JimPuls:
o---o---A---B---C old_master, origin/master
\
D---E---F master
Bây giờ, khi bạn đẩy master
đến origin
sẽ là bản cập nhật không nhanh về phía trước. Sau khi đẩy, kho origin
sẽ trông như thế này:
origin:
o---o---A...B...C (B & C are orphaned commits)
\
D---E---F master
Điều này có thể tàn nhẫn với bạn bè của bạn có thể đã thực hiện cam kết trên đầu trang của C
. Ví dụ, nếu Sally đã làm việc với bạn kho cô có thể trông như thế này:
Sally:
o---o---A---B---C origin/master
\
G---H---I master
Bây giờ, nếu bạn làm đẩy phi nhanh về phía trước của bạn và Sally hiện một fetch
kho của cô sẽ trông như thế này:
Sally:
D---E---F origin/master
/
o---o---A---B---C
\
G---H---I master
Bây giờ Sally phải tìm ra cách để có được công việc của mình (G, H, I) trở lại kho lưu trữ.Nếu cô ấy chỉ cần hợp nhất với origin/master
thì các thay đổi trong B và C sẽ trở lại trong kho lưu trữ (oops!). Thay vào đó, cô ấy sẽ phải cherry-pick
hoặc rebase
G-H-I của cô ấy thay đổi thành origin/master
.
Thật thú vị khi Git cho phép bạn làm điều đó nhưng đó là loại yêu cầu sự cố. Bạn đang thực sự hy vọng rằng Sally nhận thấy tình hình. Đây là lý do tại sao bạn nên cảnh báo tất cả những người đóng góp khác khi bạn làm điều này để họ có thể đối phó với sự thay đổi một cách thích hợp.
LƯU Ý: ở trên là trường hợp xấu nhất. Nếu chi nhánh topic1
của bạn khởi hành từ master
tại C thì thay đổi là tua đi nhanh và không có vấn đề gì.
giải thích tốt – Sujoy