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
featurekhi rebase nhánhmastervào thì ta dùng lệnhgit rebase -i mastervà 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
vimvớiilà insert mode để gõ text,:wsave lại:qlà thoát,esctrở 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
rewordhayr - Commit nào muốn giữ
codenhưng không muốn giữmessagethì dùng lệnhfixuphayfphí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 4vàbranch 5và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