“Git merge” được sử dụng khi nào?
- Git merge được dùng khi ta muốn gộp hai branch lại với nhau, thao tác này thường dùng để merge branch khác vào branch
master
trước khipush
lênremote repository
, hoặc merge hai branch thành một để giải quyết chung một task.
Cấu trúc câu lệnh “git merge”
$ git merge <branch_name>
hoặc
$ git merge <branch-name> <merged-branch-name>
Ví dụ tình huống sử dụng “git merge”
Hãy hình dung chuyện sẽ xảy ra khi chúng ta bắt đầu làm việc trên một tính năng mới, trên feature
branch, sau đó team khác commit code mới lên master
branch.
Cái commit mới trong master
liên quan đến feature
chúng ta đang làm. Để lấy commit mới này từ master
và đưa về feature
branch đang làm, chúng ta có 2 lựa chọn: merge hoặc rebase
Lựa chọn merge
git checkout feature git merge master //hoặc viết bằng một dòng luôn git merge master feature
Kết quả là nó sẽ tạo ra một merge commit mới trên feature
branch, Chúng ta có một cấu trúc như sau
Nói một cách khác, feature branch sẽ có thêm một stage
cần commit
. Nếu master bị thay đổi thường xuyên, liên tục, cái history của feature branch có thể sẽ rất lộn xộn, mặc dù có thể xử lý bằng git log
, tuy nhiên các bạn developer khác sẽ rất khó mà hiểu được history của project
Lựa chọn rebase
Một lựa chọn khác với merge
, là dùng rebase
(Vấn đề này không liên quan đến git merge, nhưng được nói thêm ở đây để hiểu thêm về lệnh git rebase)
git checkout feature git rebase master
Nó sẽ đưa toàn bộ feature branch lên trên cùng của master.
Lợi ích của dùng rebase
là chúng ta có history của project sạch sẽ hơn. Sẽ không có những merge commit dư thừa như trong lệnh merge
. Nhưng trong tình huống này thì đừng bao giờ dùng rebase
nhé, xem tiếp để biết lý do..
Đừng bao giờ chọn “git rebase” cho tình huống này
Hãy thử đoán xem chuyện gì xảy ra nếu chúng ta rebase
master
vào feature
branch
Lệnh rebase
sẽ đưa toàn bộ commit của master
xuống feature
. Vấn đề là cái này chỉ nằm trên local repository
của chúng ta. Tất cả những dev khác sẽ tiếp tục làm việc trên master
gốc. Git lúc này sẽ hiểu history master
của chúng ta không phụ thuộc vào những người khác.
Cách duy nhất để sync
lại 2 master branch là merge
chúng lại. Bạn đã thấy sự rắc rối chưa?
Cân nhắc trước khi lựa chọn rebase
Trước khi chạy lệnh git rebase
, luôn hỏi chính mình “Có đứa nào đang làm việc trên branch này?” Nếu câu trả lời là có, rút tay khỏi bàn phím và nghĩ đến giải pháp an toàn hơn như git revert