Courses
Nếu bạn từng nhìn chằm chằm vào lịch sử Git rối rắm và tự hỏi commit nào mới thực sự quan trọng, đã đến lúc bạn cần hiểu sự khác nhau giữa rebase và merge.
Hai chiến lược tích hợp nhánh chính của Git—merge và rebase—phục vụ những mục đích khác nhau trong quy trình phát triển của bạn. Lựa chọn giữa chúng ảnh hưởng trực tiếp đến hiệu quả review code, quá trình gỡ lỗi và khả năng bảo trì dự án về lâu dài. Cách làm sai có thể biến lịch sử commit của bạn thành một mớ hỗn độn khó đọc hoặc xóa bỏ bối cảnh cộng tác quan trọng mà đội ngũ cần.
Trong hướng dẫn này, bạn sẽ biết khi nào nên dùng mỗi chiến lược, cách chúng xử lý xung đột khác nhau ra sao, và cách triển khai các quy trình kết hợp để tận dụng ưu điểm của cả hai.
Tóm tắt nhanh: Git Rebase vs Git Merge
Đang cần câu trả lời nhanh?
- Git merge giữ nguyên toàn bộ lịch sử phát triển bằng cách tạo các commit mới kết hợp nhánh mà không thay đổi các commit hiện có.
- Git rebase viết lại lịch sử bằng cách phát lại các commit từ một nhánh lên trên một nhánh khác, tạo ra lịch sử tuyến tính nhưng thay đổi mã băm SHA của commit.
Hãy dùng merge cho cộng tác và truy vết kiểm toán, và dùng rebase cho phát triển trên nhánh riêng cần lịch sử sạch.
Tiếp tục đọc để tìm hiểu chi tiết!
Hiểu các khái niệm cốt lõi
Trước khi chọn chiến lược tích hợp phù hợp, bạn cần hiểu rõ cách mỗi phương pháp vận hành. Hãy phân tích cơ chế của cả hai cách tiếp cận.
Tìm hiểu về git merge
Git merge hoạt động như một cơ chế tích hợp không phá hủy, bảo toàn toàn bộ lịch sử phát triển của dự án. Khi bạn merge các nhánh, Git tạo một commit mới kết hợp thay đổi từ cả hai nhánh mà không sửa các commit đã tồn tại.
Cách này tỏa sáng trong môi trường cộng tác nơi nhiều lập trình viên làm việc trên cùng mã nguồn cùng lúc. Bạn có thể thấy chính xác khi nào tính năng được phát triển, ai làm phần nào, và các nhánh đã tiến hóa ra sao theo thời gian.
Các dự án nhạy cảm với kiểm toán có thể hưởng lợi từ tính minh bạch của git merge. Phần mềm tài chính, ứng dụng y tế và các ngành chịu quản lý khác thường yêu cầu khả năng truy vết đầy đủ các thay đổi mã để tuân thủ.
Lệnh này dùng thuật toán hợp nhất ba chiều, so sánh tổ tiên chung của hai nhánh với trạng thái hiện tại của mỗi nhánh. Điều này tạo ra các merge commit đóng vai trò điểm nút trong đồ thị commit, cho thấy nơi các nhánh hội tụ.
Tóm lại, nó bảo toàn ngữ cảnh giá trị, nhưng cũng làm tăng độ phức tạp hiển thị của lịch sử dự án.
# On main, bring in feature-xyz:
git checkout main
git merge feature
# ➜ Creates a merge commit:
# * Merge branch 'feature'
# |\
# | * feature change 1
# | * feature change 2
# * | hotfix on main
# |/
# * initial commit

Hình 1 - Lịch sử dự án Git sau một thao tác git merge.
> Để tìm hiểu thêm về Git merge, bạn có thể đọc hướng dẫn chi tiết của chúng tôi.
Tìm hiểu về git rebase
Git rebase về bản chất là viết lại lịch sử commit bằng cách lấy các commit từ một nhánh và phát lại chúng lên trên một nhánh khác. Thay vì tạo merge commit, rebase di chuyển toàn bộ nhánh tính năng của bạn để bắt đầu từ commit mới nhất của nhánh đích.
Quy trình này liên quan đến việc chỉnh sửa lịch sử: Git tạm thời loại bỏ các commit của bạn, cập nhật nhánh gốc, rồi áp dụng lại các thay đổi của bạn từng commit một. Mỗi commit nhận mã băm SHA mới, về thực chất tạo ra các commit mới chứa cùng thay đổi nhưng có quan hệ cha khác.
Rebase xử lý xung đột ở mức độ chi tiết hơn merge. Thay vì giải quyết tất cả xung đột cùng lúc, bạn sẽ gặp và xử lý xung đột theo từng commit khi Git phát lại các thay đổi của bạn.
Cách làm này đặc biệt phù hợp với các nhánh riêng tư nơi chỉ mình bạn thực hiện thay đổi. Bạn có thể dọn dẹp lịch sử commit, squash các commit liên quan, và trình bày một chuỗi thay đổi trau chuốt cho nhóm của mình.
Tuy nhiên, rebase các nhánh công khai—nơi người khác đã dựa vào để làm việc—có thể gây ra vấn đề phối hợp nghiêm trọng và tạo commit trùng lặp trong lịch sử dùng chung.
# Bring your feature branch up to date:
git checkout feature
git rebase main
# If you want to squash or reorder:
git rebase -i main
# → opens editor with:
# pick abc123 Feature commit 1
# pick def456 Feature commit 2
# Change to:
# pick abc123 Feature commit 1
# squash def456 Feature commit 2

Hình 2 - Lịch sử dự án Git sau một thao tác git rebase.
> Nếu bạn là người mới bắt đầu, hướng dẫn Git rebase này sẽ giúp bạn khởi động.
Hệ quả đối với quy trình và quản lý nhánh
Việc chọn merge hay rebase định hình cách cả đội ngũ cộng tác và quản lý tích hợp mã. Mỗi chiến lược tạo ra các mô hình phát triển riêng, ảnh hưởng từ công việc hằng ngày đến bảo trì dự án dài hạn.
Hãy đi sâu vào từng cách.
Mô hình phát triển tập trung vào merge
Các đội dùng quy trình thiên về merge thường nhấn mạnh cô lập tính năng và chu kỳ tích hợp định kỳ. Lập trình viên tạo nhánh tính năng, làm độc lập trong vài ngày hoặc vài tuần, rồi merge công việc hoàn tất về nhánh chính trong một bản cập nhật lớn.
Mô hình này khuyến khích tập trung hoàn thiện toàn bộ tính năng trước khi tích hợp. Bạn thường thấy các đội lên lịch "ngày tích hợp" định kỳ, nơi nhiều nhánh tính năng được merge cùng lúc. Cách tiếp cận phù hợp với các đội thích sự tách bạch rõ ràng giữa giai đoạn phát triển và giai đoạn tích hợp.
Quy trình thiên merge có xu hướng tạo đồ thị commit phức tạp hơn khi quy mô đội tăng, với nhiều merge commit tạo cấu trúc như mạng nhện, gây khó khăn khi lần theo tiến hóa của một tính năng cụ thể. Tuy vậy, độ phức tạp này đi kèm lợi ích là giữ nguyên đầy đủ bối cảnh về cách tính năng được phát triển và tích hợp.
Mô hình nhánh tạo ra các mốc tự nhiên, nơi bạn có thể dễ dàng quay lui toàn bộ tính năng mà không ảnh hưởng đến phần phát triển khác. Vành đai an toàn này hấp dẫn các đội làm ứng dụng quan trọng, nơi sự ổn định quan trọng hơn tốc độ phát triển.
> Bạn có biết có thể revert merge commit không? Hướng dẫn Git revert với nhiều ví dụ sẽ chỉ cho bạn cách làm.
Mô hình phát triển thiên về rebase
Các đội chú trọng rebase áp dụng thực hành rebase liên tục, nơi lập trình viên thường xuyên cập nhật nhánh tính năng với các thay đổi mới nhất từ nhánh chính. Thay vì đợi tính năng hoàn tất, thành viên rebase công việc nhiều lần mỗi ngày để bắt kịp phát triển đang diễn ra.
Những đội này nhấn mạnh việc squash commit và chắt lọc lịch sử. Trước khi merge bất kỳ công việc nào, lập trình viên gộp các commit liên quan, viết lại thông điệp commit cho rõ ràng, và đảm bảo nhánh của họ kể một câu chuyện mạch lạc về quá trình phát triển tính năng.
Dự án Linux kernel là một ví dụ điển hình về sử dụng rebase hiệu quả ở quy mô rất lớn. Với hàng nghìn cộng tác viên trên toàn thế giới, dự án duy trì lịch sử commit cực kỳ sạch nhờ tiêu chuẩn rebase nghiêm ngặt. Chính Linus Torvalds khuyến khích rebase nhánh tính năng trước khi gửi, cho rằng lịch sử được chắt lọc giúp gỡ lỗi và review code hiệu quả hơn nhiều.
Các đội thiên rebase thường báo cáo vòng đời review code nhanh hơn vì người review có thể theo dõi tiến trình thay đổi logic thay vì giải mã sự hỗn loạn theo thời gian của phát triển cộng tác.
> Bạn mới bắt đầu và muốn giữ repo gọn gàng? Lệnh Git clean là tất cả những gì bạn cần.
Động lực xử lý xung đột
Khi các nhánh phân kỳ và sửa cùng đoạn mã, xung đột là điều khó tránh khỏi, bất kể chiến lược tích hợp. Tuy vậy, merge và rebase xử lý xung đột theo những cách khác nhau, ảnh hưởng đến cả quy trình tức thời và việc bảo trì dự án lâu dài.
Đặc điểm xung đột khi merge
Git merge trình bày mọi xung đột cùng lúc trong một phiên giải quyết. Khi bạn chạy git merge feature-branch, Git xác định mọi tệp có xung đột và đánh dấu tất cả phần có vấn đề cùng thời điểm, cho phép bạn thấy đầy đủ phạm vi thách thức tích hợp ngay từ đầu.
Cách này giữ được ngữ cảnh trong quá trình xử lý xung đột. Bạn có thể thấy chính xác thay đổi nào đến từ nhánh nào, khi nào chúng được thực hiện và ai là tác giả. Merge commit tạo ra từ việc bạn giải quyết xung đột trở thành bản ghi vĩnh viễn về cách bạn dung hòa các thay đổi cạnh tranh.
Xung đột khi merge duy trì việc theo dõi rõ ràng quá trình ra quyết định. Nếu bạn cần xem lại vì sao một số đoạn mã được chọn thay vì phương án khác sau nhiều tháng, merge commit sẽ hiển thị cả phiên bản xung đột gốc và cách bạn giải quyết cuối cùng. Dấu vết kiểm toán này vô giá cho việc gỡ lỗi và hiểu sự tiến hóa của dự án.
Tuy nhiên, các lần merge phức tạp với nhiều xung đột có thể trở nên quá tải. Bạn có thể phải xử lý hàng chục tệp xung đột trong một phiên, dễ bỏ sót vấn đề tích hợp tinh vi hoặc vô tình tạo lỗi mới trong quá trình giải quyết.
git checkout main
git merge feature-xyz
# ← conflicts in file foo.js
# Resolve in your editor, then:
git add foo.js
git commit
Đặc điểm xung đột khi rebase
Git rebase buộc bạn giải quyết xung đột theo từng bước, từng commit một, khi nó phát lại lịch sử nhánh của bạn. Khi xung đột phát sinh trong lúc rebase, Git dừng ở mỗi commit có vấn đề và yêu cầu bạn giải quyết trước khi tiếp tục commit tiếp theo.
Cách tiếp cận chi tiết này chia nhỏ vấn đề tích hợp phức tạp thành các phần dễ xử lý. Thay vì đối mặt với tất cả xung đột cùng lúc, bạn xử lý theo trình tự logic chúng được tạo ra, thường trực quan hơn và ít lỗi hơn.
Tính lặp từng bước giúp duy trì tính toàn vẹn lịch sử bằng cách đảm bảo mỗi commit riêng lẻ vẫn mạch lạc và hoạt động. Vì bạn giải quyết xung đột trong ngữ cảnh thay đổi cụ thể, bạn ít có khả năng vô tình trộn thay đổi không liên quan hoặc tạo commit làm hỏng bản dựng.
Tuy nhiên, việc giải quyết xung đột khi rebase có thể trở nên nhàm chán với các nhánh tính năng kéo dài. Bạn có thể gặp cùng một xung đột nhiều lần nếu các thay đổi tương tự xuất hiện ở nhiều commit, đòi hỏi lặp lại việc xử lý các vấn đề gần như giống hệt nhau.
git checkout feature-xyz
git rebase main
# ← stops at first bad commit:
# Resolve foo.js, then:
git add foo.js
git rebase --continue
Bảo tồn lịch sử vs. dễ đọc
Mâu thuẫn cốt lõi giữa merge và rebase xoay quanh việc bạn ưu tiên hồ sơ lịch sử chân thực hay câu chuyện dự án sạch, dễ đọc. Lựa chọn này ảnh hưởng đến cách các nhà phát triển trong tương lai hiểu mã nguồn và xử lý sự cố sau nhiều năm.
Tính trung thực lịch sử của merge
Chiến lược merge giữ nguyên tính xác thực theo thời gian bằng cách duy trì chính xác thứ tự thời gian của các hoạt động phát triển. Bạn có thể thấy khi nào lập trình viên thực sự viết mã, khi nào họ đẩy thay đổi, và các tính năng phát triển song song như thế nào thay vì tách biệt.
Cách này ghi lại bối cảnh cộng tác giá trị mà những phương pháp tích hợp khác làm mất. Bạn sẽ thấy quá trình phản biện trong review code, các commit thử nghiệm dẫn đến đột phá, và những khởi đầu sai hướng nhưng cuối cùng lại định hướng giải pháp tốt hơn. Sự thật “lộn xộn” của phát triển phần mềm trở thành một phần hồ sơ lâu dài của bạn.
Merge commit như các dấu thời gian đánh dấu thời điểm tính năng cụ thể được nhập vào mã nguồn chính. Nếu bạn cần hiểu ứng dụng trông như thế nào tại một thời điểm cụ thể, lịch sử merge cho bạn các điểm tích hợp chính xác thay vì chuỗi được sắp xếp nhân tạo.
Tuy nhiên, tính trung thực này đánh đổi bằng sự mạch lạc về mặt câu chuyện. Đồ thị commit của bạn trở nên phức tạp với các nhánh đan xen, có thể khiến lập trình viên choáng ngợp khi cố hiểu quá trình phát triển tính năng. Dòng thời gian chân thực thường che mờ tiến trình logic của ý tưởng, làm khó việc theo dõi lý do đằng sau các thay đổi lớn.
Tính mạch lạc câu chuyện của rebase
Rebase tạo nên lịch sử được biên tập, trình bày quá trình phát triển tính năng như một chuỗi thay đổi có chủ đích và logic. Thay vì thể hiện thực tế bừa bộn của phát triển, lịch sử đã rebase kể câu chuyện về những gì lẽ ra đã diễn ra nếu lập trình viên có tầm nhìn hoàn hảo.
Cách tiếp cận này loại bỏ tiếng ồn từ commit thử nghiệm, bản vá tạm thời và các tinh chỉnh lặp đi lặp lại làm rối lịch sử phát triển chân thực. Bạn nhận được tiến trình sạch, nơi mỗi commit đại diện cho một bước có ý nghĩa hướng tới giải pháp cuối cùng, giúp việc hiểu các tính năng phức tạp sau nhiều tháng dễ dàng hơn.
Chuỗi đã rebase hỗ trợ gỡ lỗi vì chúng trình bày thay đổi theo trật tự logic thay vì thời gian. Khi truy vết lỗi, bạn có thể theo dòng chảy khái niệm của quá trình phát triển tính năng thay vì nhảy qua lại giữa các luồng công việc song song của nhiều lập trình viên.
Sự đánh đổi nằm ở việc xét lại lịch sử có thể che khuất bối cảnh quan trọng về cách quyết định thực sự được đưa ra. Bạn mất đi dòng thời gian phát hiện vấn đề, thời lượng phát triển giải pháp, và các hướng tiếp cận đã thử rồi bỏ. Lịch sử được “làm sạch” này có thể khiến khó hiểu vì sao một số lựa chọn thiết kế được đưa ra hoặc khó rút kinh nghiệm từ các mẫu phát triển trong quá khứ.
Chiến lược tích hợp
Thay vì chỉ chọn giữa merge và rebase, nhiều đội ngũ thành công áp dụng chiến lược lai, tận dụng thế mạnh của cả hai. Điều cốt yếu là hiểu khi nào mỗi phương pháp phục vụ tốt nhất cho nhu cầu dự án và động lực đội ngũ của bạn.
Mô hình quy trình lai
Mô hình tích hợp theo pha kết hợp rebase để dọn dẹp khi phát triển cục bộ với merge cho tích hợp ở cấp độ đội nhóm. Trong giai đoạn phát triển riêng, bạn dùng rebase để squash commit thử nghiệm, sắp xếp lại thay đổi hợp lý và tạo câu chuyện tính năng sạch trước khi chia sẻ công việc.
Khi nhánh tính năng sẵn sàng cho review nhóm, bạn chuyển sang tích hợp dựa trên merge để giữ bối cảnh cộng tác và duy trì ranh giới tính năng rõ ràng trong lịch sử dùng chung. Cách tiếp cận này giúp bạn có đóng góp cá nhân được biên tập trong một dòng thời gian đội nhóm chân thực.
# 1. Clean up locally:
git checkout feature-xyz
git rebase -i main # squash, reorder, polish commits
# 2. Share & integrate:
git checkout main
git merge feature-xyz
Mô hình này đặc biệt hiệu quả cho các đội vừa và lớn, nơi lập trình viên cần cả sự linh hoạt ở không gian làm việc cá nhân lẫn tính minh bạch ở cấp tổ chức. Bạn có thể lặp nhanh trong phát triển nhờ khả năng viết lại lịch sử của rebase, rồi “chốt” công việc bằng tích hợp không phá hủy của merge khi cộng tác với người khác.
Sự cân bằng này tối ưu hóa cả năng suất và tính minh bạch trong quy trình phát triển hiện đại. Lập trình viên có lịch sử commit sạch để review hiệu quả, trong khi quản lý dự án giữ được dòng thời gian tích hợp cần thiết cho lập kế hoạch phát hành và theo dõi sự cố.
Lưu ý về hệ sinh thái công cụ
Các client Git hiện đại và IDE ảnh hưởng đáng kể đến việc chiến lược nào phù hợp nhất với đội ngũ bạn. Các trình duyệt lịch sử trực quan như GitKraken, SourceTree và biểu đồ mạng của GitHub giúp lịch sử merge phức tạp dễ điều hướng hơn so với chỉ dùng dòng lệnh.
Trình chỉnh sửa xung đột tiên tiến cũng làm giảm lợi thế truyền thống của rebase so với merge. Các công cụ như trình hợp nhất ba chiều của VS Code, giao diện xử lý xung đột của IntelliJ và các công cụ merge chuyên dụng có thể xử lý xung đột quy mô lớn trực quan hơn bao giờ hết.
Tích hợp CI/CD đóng vai trò thiết yếu trong việc chọn chiến lược. Pipeline kiểm thử tự động hoạt động dự đoán hơn với quy trình dựa trên merge vì chúng có thể kiểm thử chính xác các commit sẽ lên production. Quy trình rebase cần bước xác thực bổ sung để đảm bảo việc viết lại lịch sử không đưa vào vấn đề tích hợp chưa bị phát hiện trong kiểm thử từng commit.
Tính năng theo nền tảng cũng quan trọng. Nút "Squash and merge" của GitHub cung cấp việc dọn dẹp kiểu rebase trong một quy trình dựa trên merge, trong khi các tùy chọn rebase của GitLab mang lại tính minh bạch kiểu merge trong quy trình rebase. Nền tảng lưu trữ bạn chọn có thể ảnh hưởng lớn đến việc chiến lược tích hợp nào trở nên tự nhiên với đội bạn.
Tổng kết Git Rebase vs Git Merge
Việc lựa chọn giữa git rebase và git merge không có đáp án chung cho mọi trường hợp.
Nó đòi hỏi phân tích theo ngữ cảnh về nhu cầu cụ thể của đội, ràng buộc dự án và mục tiêu bảo trì dài hạn. Cách hiệu quả nhất thường là hiểu khi nào mỗi chiến lược phục vụ quy trình làm việc của bạn thay vì cứng nhắc chỉ dùng một phương pháp.
Lựa chọn chiến lược nên phù hợp với các yếu tố thực tế như quy mô đội, giai đoạn dự án và yêu cầu tuân thủ. Nhóm nhỏ làm dự án giai đoạn đầu có thể hưởng lợi từ lịch sử sạch và khả năng lặp nhanh của rebase. Nhóm lớn quản lý sản phẩm trưởng thành thường cần khả năng cộng tác, minh bạch và truy vết của merge. Các lĩnh vực chịu quản lý có thể cần tính trung thực lịch sử của merge cho tài liệu tuân thủ.
Hãy cân nhắc giai đoạn hiện tại của dự án khi đưa ra quyết định tích hợp. Trong các sprint phát triển tích cực, rebase có thể giúp duy trì tốc độ và hiệu quả review code. Trong giai đoạn ổn định trước phát hành lớn, tính không phá hủy của merge mang lại tích hợp an toàn hơn với tùy chọn quay lui rõ ràng.
Sẳn ssàng học thêm về Git và quản lý phiên bản? Các khóa học của DataCamp dưới đây là bước tiếp theo dành cho bạn:
Câu hỏi thường gặp
Sự khác nhau chính giữa git rebase và git merge là gì?
Git merge tạo một commit mới kết hợp thay đổi từ hai nhánh đồng thời giữ nguyên lịch sử commit gốc của cả hai. Ngược lại, Git rebase viết lại lịch sử commit bằng cách lấy commit từ một nhánh và phát lại lên trên nhánh khác. Merge duy trì dòng thời gian phát triển theo thứ tự thực tế, cho thấy khi nào tính năng được tích hợp. Rebase tạo lịch sử tuyến tính, gọn gàng, trông như mọi thay đổi được thực hiện tuần tự. Lựa chọn giữa chúng phụ thuộc vào việc bạn ưu tiên tính chính xác lịch sử hay tính mạch lạc về câu chuyện.
Khi nào tôi nên dùng git merge thay vì git rebase?
Hãy dùng git merge khi làm việc trong môi trường cộng tác, nơi nhiều lập trình viên cùng đóng góp vào một codebase và bạn cần giữ bối cảnh về cách các tính năng được phát triển cùng nhau. Merge rất cần thiết cho các dự án nhạy cảm với kiểm toán, đòi hỏi khả năng truy vết đầy đủ các thay đổi mã để tuân thủ. Đây cũng là lựa chọn an toàn hơn khi làm việc với nhánh công khai mà thành viên khác đã dựa vào, vì merge không viết lại lịch sử commit hiện có. Ngoài ra, merge phù hợp với đội thích ranh giới tính năng rõ ràng và chu kỳ tích hợp định kỳ thay vì liên tục biên tập lịch sử.
Khi nào tôi nên dùng git rebase thay vì git merge?
Git rebase lý tưởng cho các nhánh tính năng riêng tư, nơi chỉ mình bạn thực hiện thay đổi và muốn trình bày một chuỗi commit sạch, logic cho nhóm. Dùng rebase khi bạn cần loại bỏ commit thử nghiệm, chỉnh thông điệp commit, hoặc sắp xếp lại thay đổi thành câu chuyện mạch lạc hơn trước khi chia sẻ. Nó đặc biệt hữu ích trong giai đoạn phát triển tích cực khi bạn muốn duy trì lịch sử tuyến tính dễ theo dõi và dễ gỡ lỗi. Rebase cũng phù hợp với các đội ưu tiên hiệu quả review code và ưa lịch sử commit được biên tập hơn là tính xác thực theo thời gian.
Tôi có thể dùng cả git merge và git rebase trong cùng một dự án không?
Có, nhiều đội ngũ thành công áp dụng quy trình lai, kết hợp cả hai chiến lược tùy theo ngữ cảnh và giai đoạn phát triển. Cách phổ biến là dùng rebase để dọn dẹp phát triển cục bộ, sắp xếp và trau chuốt commit, rồi chuyển sang merge cho tích hợp ở cấp đội để giữ bối cảnh cộng tác. Bạn có thể rebase nhánh tính năng để tạo chuỗi commit sạch, rồi merge vào nhánh chính để duy trì ranh giới tính năng rõ ràng trong lịch sử dùng chung. Cách lai này giúp nhận lợi ích của cả hai chiến lược đồng thời tránh nhược điểm tương ứng.
Điều gì xảy ra nếu tôi rebase một nhánh công khai mà người khác đang làm việc trên đó?
Rebase một nhánh công khai mà người khác đang dựa vào sẽ gây ra vấn đề phối hợp nghiêm trọng và có thể tạo commit trùng lặp trong lịch sử dùng chung. Khi rebase, bạn đang thay đổi mã băm SHA của commit, nghĩa là các nhánh của lập trình viên khác sẽ không còn cha mẹ commit đúng nữa. Điều này buộc thành viên phải thực hiện thao tác khôi phục phức tạp hoặc có nguy cơ mất việc khi họ cố merge thay đổi của mình. Nếu buộc phải rebase một nhánh công khai, hãy phối hợp trước với tất cả thành viên bị ảnh hưởng và cân nhắc dùng git rebase --onto hoặc các kỹ thuật nâng cao tương tự để giảm gián đoạn.
