Bản chất git-rebase là chuyển commit gốc của một nhánh, từ commit này sang commit khác:

Git tutorial: Git rebase

Như trong hình trên:

- Với nhánh feature: Commit đầu tiên (commit gốc) của nó là commit số 1

- Khi thực hiện lệnh git-rebase: 

$ git checkout feature
$ git rebase master

thì commit gốc của nhánh feature sẽ là commit mà master đang trỏ tới

- Sau khi đã rebase, ta chỉ cần checkout sang nhánh master rồi thực hiện lệnh git merge với nhánh feature, khi đó Git chỉ việc di chuyển con trỏ master sang commit mới nhất trên nhánh feature

$ git checkout master
$ git merge feature

So với git merge thì git rebase sẽ cho một lịch sử git nhìn trông "đẹp mắt" hơn, vì các commit sẽ không còn bị phân nhánh nữa mà sẽ trở thành "linear" (trên cùng 1 flow, 1 timeline), tuy nhiên nên tránh dùng git rebase khi:

- bạn không hiểu mình đang làm gì :D

- khi đang làm việc nhóm: Không phải dev nào cũng xài git reabase như bạn trên local repo của họ --> khi push lên remote repo có thể sẽ xảy ra xung đột