Điều quan trọng cần nhận ra là các nhánh Git không gì khác ngoài nhãn trỏ đến cam kết. Phân nhánh trong Git theo nghĩa đen là phân nhánh. Đây là những gì một kho lưu trữ trông như thế nào nếu feature
nhánh tắt master
khi master
được một cam kết B.
A - B - C - F - H [master]
\
D - E - G - I[feature]
Thấy không? Chi nhánh thực tế. Khi bạn git merge feature
thành thạo, bạn có được điều này.
A - B - C - F - H - J [master]
\ /
D - E - G - I [feature]
Và sau khi bạn git branch -d feature
lịch sử chi nhánh vẫn còn!
A - B - C - F - H - J [master]
\ /
D - E - G - I
J có cha mẹ H và I. J không thể tồn tại mà không có chúng, nó được nướng vào cách Git hoạt động. Tôi không thể tồn tại mà không có G. G không thể tồn tại mà không có E. Và cứ thế. Chi nhánh phải giữ nguyên là
J là cam kết hợp nhất thường chứa tên chi nhánh đang được hợp nhất. Giống như bất kỳ cam kết nào khác, vì vậy bạn thậm chí có thể thêm nhiều thông tin hơn vào nó, giống như một liên kết quay lại trình theo dõi vấn đề của bạn.
git merge --no-ff
được sử dụng để ngăn Git không thực hiện "tua đi nhanh" và mất lịch sử chi nhánh. Điều này xảy ra nếu không có công việc nào được thực hiện trên master
kể từ khi chi nhánh được tạo. Một tua về phía trước trông như thế này.
A - B[master]- D - E - G - I [feature]
git checkout master
git merge feature
A - B - D - E - G - I [feature] [master]
Kể từ master
là tổ tiên trực tiếp của feature
, không merge là bắt buộc. Git chỉ có thể di chuyển nhãn master
. Lịch sử chi nhánh của bạn bị mất, có vẻ như D, E, G và tôi đã được thực hiện như là cam kết cá nhân trên tổng thể. git merge --no-ff
yêu cầu Git không bao giờ làm điều này, để luôn thực hiện hợp nhất.
Trong tương lai, khi nhận thấy lỗi đã được giới thiệu trong G, bất kỳ ai duyệt kho đều có thể thấy nó được thực hiện như một phần của nhánh, nhìn về phía trước để tìm cam kết hợp nhất và nhận thông tin về nhánh từ đó.
Mặc dù vậy, tại sao xóa chi nhánh?Hai lý do. Đầu tiên, nó sẽ làm lộn xộn danh sách các chi nhánh của bạn với các cành chết.
Thứ hai và quan trọng hơn, nó ngăn bạn sử dụng lại nhánh. Việc phân nhánh và hợp nhất rất phức tạp. Sử dụng một lần, các nhánh tính năng ngắn ngủi đơn giản hóa quy trình bằng cách đảm bảo bạn chỉ bao giờ hợp nhất chi nhánh trở lại thành master một lần. Điều này giúp loại bỏ nhiều vấn đề kỹ thuật và quản lý. Khi bạn hợp nhất một chi nhánh, nó là được thực hiện. Nếu bạn cần sửa chữa một vấn đề được giới thiệu trong nhánh đó, chỉ cần coi nó như một lỗi trong master và tạo một nhánh mới để sửa nó.
Thật không may, git log
nằm đối với người dùng và trình bày biểu diễn tuyến tính lịch sử không tuyến tính. Để khắc phục điều này, hãy sử dụng git log --graph --decorate
. Điều này sẽ vẽ các dòng như trong ví dụ của tôi ở trên, và cho bạn thấy bất kỳ chi nhánh và thẻ trên mỗi cam kết. Bạn sẽ nhận được một cái nhìn sâu sắc hơn về kho lưu trữ.
Nếu bạn đang sử dụng máy Mac, GitX sẽ trực quan hóa kho lưu trữ cho bạn. gitk là phiên bản chung.
Vì tính năng của bạn đã hoàn tất. Điều gì sẽ là cần thiết để giữ lại chi nhánh, do đó làm lộn xộn kết quả của git branch -a etc? –
@OliverCharlesworth history –
@ Z.Khullah - Các cam kết vẫn sẽ có trong lịch sử. –