Git rebase -i
Git rebase
Khuyến mãi link học git game Link
Git rebase để làm với mục đích làm cho toàn bộ commit của source code theo thứ tự. Git rebase cần phải làm với nguyên tắc là
-
Trước khi tách nhánh thì phải dùng lệnh checkout master và pull toàn bộ master mới nhất thường với lệnh
git checkout master && git pull
-
Sau đó thì từ source code mới nhất của master sẽ làm lệnh tạo nhánh và checkout nhánh mới luôn
git checkout -b <new_branch>
-
Sau đó vào trong nhánh mới tạo làm việc và commit code thoải mái.
-
Để tránh mất code trên máy tính thì phải push code lên git. Và Trước khi push code thì phải nhớ làm động tác là
- Commit trên branch đang làm việc
- sử dụng lệnh
git checkout master && git pull
để kéo code mới nhất về lại - CHECKOUT lại branch đang làm việc và sau đó dùng lệnh
git rebase master
để Gắn toàn bộ commit của branch đang làm lên trước commit mới nhất của master - Sau đó dùng lệnh đẩy branch đang làm lên git
git push -f origin <tên_branch>
Lưu ý: Khi dùng lệnh rebase từ feature branch qua master thì có một vấn đề nảy sinh là có thể có nhiều commit từ feature branch không khác nhau nhiều code cho mỗi lần thay đổi và do đó thì ta nên gộp các commit lại với nhau khi làm lệnh rebase
- Sử dụng lệnh
git rebase -i master
để có thể mở ra một cửa sổ để ta có thể chỉnh sửa gộp, các commit với nhau lại trước khi rebase vàomaster
. Cũng khá hay ho.
Xem hình để biết cụ thể hơn là nhánh feature
tách ra từ nhánh master
có cùng commit tới master 1
Hình tiếp theo. Nhánh master
có thêm commit là master 2
và master 3
và đã push code lên nhánh master
.
Checkout feature với lệnh git checkout feature
và làm việc rồi commit là branch 1
rồi branch 2
và branch 3
.
Tại nhánh feature
tiếp lệnh git checkout master && git pull
để checkout ra nhánh master
và đồng thời pull
toàn bộ commit mới nhất của nhánh master là tới master 3
Sau đó git checkout feature
để checkout lại nhánh feature
và rồi sẽ dùng lệnh git rebase master
để đưa toàn bộ commit mới nhất của branch feature
lên trên đầu toàn bộ commit của nhánh master
Sau khi hoàn thành quá trình thì nhánh feature
đã chứa toàn bộ commit của chính nó và những commit đó lại đứng trên toàn bộ commit của nhánh master
Kiểm tra thêm một lần nữa để thấy tình hình sau khi dùng lệnh git rebase mater
OK, mọi việc ở nhánh feature
có thể quên đi vì nó đã ok rồi. Nhưng còn nhánh master
thì sao? Rất đơn giản. Ta chỉ việc git checkout master
và sau đó dùng lệnh git merge feature
để merge nhánh feature
vào master
thôi và ta cũng chẳng cần lo lắng thiếu commit vì toàn bộ commit của master đã nằm TRONG và nằm TRƯỚC toàn bộ commit của nhánh feature
và ta merge vào thì ngẫu nhiên master
của ta đã UP TO DATE rồi còn gì.
Bên trên là xong giai đoạn dùng git rebase Cơ bản và nói chung là ta có thể dùng cách này để làm việc.
Nhưng
có một vấn đề nho nhỏ là nếu nhánh feature
ta cứ liên tục commit kiểu sợ mất code
thì sẽ dẫn đến là sẽ có rất nhiều commit của nhánh feature
sẽ gắn vào trong list commit của nhánh master
sau khi ta dùng lệnh git merge feature
. Nếu điều này không phiền bạn thì thôi. Nhưng mà nếu nó Phiền bạn quá thì ta sẽ tiếp tục giải quyết nó thôi.
Cách giải quyết là đứng tại nhánh
feature
khi rebase nhánhmaster
vào thì ta dùng lệnhgit rebase -i master
và cụ thể thì đọc tiếp nào.
Tiếp tục câu chuyện bên trên thì ta tiếp tục làm nhánh feature
và commit branch 4
và branch 5
vào nhánh đó.
Đồng thời nhánh remote/master cũng có thêm commit master 4
. Do đó ta phải pull nhánh remote/master về local/master với lệnh git checkout master && git pull
và cụ thể thì dưới hình sau
Sau khi đứng tại nhánh feature
và dùng lệnh git rebase -i master
thì ta sẽ được git mở ra một sửa số mới thứ nhất như hình
Giới thiệu tí thì đây là cửa sổ dùng để chỉnh sửa toàn bộ commit của nhánh feature
tính từ thời điểm update
nhất với master. Với cửa sổ này thì ta lưu ý:
- Cửa sổ này dùng lệnh của
vim
vớii
là insert mode để gõ text,:w
save lại:q
là thoát,esc
trở về chế độnormal
- Commit sẽ list theo thứ tự mới phía dưới, cũ bên trên
- Commit đầu tiên phải giữ và nếu muốn thay đổi message của commit thì nên dùng lệnh
reword
hayr
- Commit nào muốn giữ
code
nhưng không muốn giữmessage
thì dùng lệnhfixup
hayf
phía trước commit-hash number của commit đó
Sau khi chỉnh sửa ưng ý thì ta dùng lệnh save, quit là :wq
và tiếp tục tới cửa sổ tiếp theo như hình dưới
Tiếp tục dùng vim
để chỉnh sửa message cho ưng ý như xong rồi save, quit như hình dưới
Sau khi hoàn thành bước phía trên thì việc tiếp theo là của git sẽ làm việc và sau đó thì ta có kết quả kiểm tra theo hình phía dưới
Cụ thể kết quả sau lần dùng lệnh git rebase -i master
thì ta có gì nào
- Nhánh
feature
đã gộp thành công 2 commitbranch 4
vàbranch 5
vào thành 1 commit mới có code bao gồm cả 2 commit nhưng chỉ có 1 message mới - Commit của nhánh
feature
đã nằm SAU commit của nhánhmaster
Việc tiếp theo là git checkout master
và git merger feature
để update nhánh master
theo hình dưới