Vấn đề
- Tại sao thỉnh thoảng dùng
git merge
, git rabase? Git merge
vàgit rebase
khác gì nhau, nên dùng cái nào?- Lịch sử git có giá trị như thế nào?
Nếu bạn là 1 git command line master thì mọi thứ đều có thể được giải quyết dưới local bằng dòng lệnh. Nhưng khi làm việc trong một nhóm đông thành viên, làm thế nào để xử lý các vấn đề conflict code, release ra sao, thêm feature mới như thế nào, hotfix ra làm sao một cách trơn tru và hiệu quả, giảm thiểu tối đa các bước thủ công, tiến dần đến một git workflow tự động hoàn toàn (devops).
Giải pháp
Các git workflow như Gitflow sinh ra để giải quyết các vấn đề này một cách hiệu quả và mạnh mẽ nhất.
Git Workflow được giới thiệu sau đây luôn giữ một tư duy cực kỳ nhất quán về
git history
luôn luôn làlinear history
(có thể hiểu là history trên một đường thẳng). Nhìn trong hình đủ thấylinear history
dễ hiểu hơn rất nhiều so vớinon-linear history
, nhìn vào graph là có thể thấy được thứ tự của các commit và sự khác nhau giữa các version được release.
Git merge vs Git rebase
Git merge và Git rebase là hai cách tiếp cận khác nhau để kết hợp các thay đổi từ các nhánh khác nhau vào một nhánh chính. Dưới đây là một so sánh giữa hai phương pháp này:
- Git Merge:
- Tạo ra một commit merge mới trên nhánh đích
- Lịch sử commit của mỗi nhánh được giữ nguyên
- Có thể dẫn đến lịch sử commit phức tạp và dài dòng.
- Thích hợp cho việc kết hợp các tính năng lớn hoặc nhóm thay đổi lớn từ các nhánh khác nhau.
- Git Rebase:
- Di chuyển các commit của bạn trên một nhánh đích mới
- Lịch sử commit trở nên tuyến tính hơn, với các commit được thêm vào nhánh mục tiêu theo thứ tự.
- Có thể tạo ra một lịch sử commit mạch lạc hơn và dễ đọc hơn.
- Cần cẩn thận khi sử dụng rebase với các nhánh đã được chia sẻ công khai với nhóm
Nguyên tắc tiên quyết
- Để update code mới nhất, không
merge
trên local, hãy dùngrebase
Merge
tự động bằngmerge (pull) request
(cần cấu hình để khimerge
sẽ sinh ra một empty commit nhằm đánh dấu vị trí merge)