Giả sử bạn đang dev trên branch có tên feature-123
Trong lúc bạn code thì cần những code của người khác trên branch master. Mỗi lần merge từ master vào feature-123 sẽ tạo ra 1 merge commit làm lịch sử của git rất rối.
Đây là follow cách làm của mình:
-
- Commit tạm tất cả những thay đổi trên branch của mình
12git add .git commit -m "temp"
- Chuyển sang branch master để pull code mới nhất
12git checkout mastergit pull
- Chuyển về branch của mình sử dụng rebase
12git checkout feature-123git rebase -i master
Ở bước này bạn có thể thay đổi thứ tự của commit trên branch của mình hoặc gộp (squash) tất cả thành 1 commit. Nếu không muốn thay đổi gì bạn bấm esc => :wq => enter
- Sửa conflict nếu có rồi rebase tiếp
123Nếu có conflict thì sửa conflict rồi chạy lệnh saugit add .git rebase --continue
- Reset commit tạm rồi push những update từ master đã dc merge vào
12345git log#tìm đến id của commit temp vừa nãy giả sử là e5bfb334b91e9cc428db766e1c78aa7c964aa972#Lệnh rebase sẽ luôn luôn để những commit trên branch feature ở trên cùng.git reset --soft e5bfb334b91e9cc428db766e1c78aa7c964aa972git push (Nếu bạn đã có commit được push ở feature-123 thì sẽ cần sử dùng git push -f vì rebase đã thay đổi lịch sử git trên branch. Lưu ý thận trọng khi dùng -f vì có thể gây mất code
※ Có thể dùng cách sau nếu không muốn reset các commit đã có trên feature-123
- Commit tạm tất cả những thay đổi trên branch của mình
Dùng lệnh push nhưng chỉ push từ commit cuối cùng của develop. Giả sử commit cuối cùng của develop có sha là 13a0af3c1f52262e68e2ba8211369f52769c9dea thì ta sẽ dùng lệnh git push origin 13a0af3c1f52262e68e2ba8211369f52769c9dea:feture-123
Bạn đã có 1 branch giống như vừa merge từ master mà trong lịch sử (log) ko hề có commit merge. Với cách này bạn có thể liên tục lấy code mới nhất từ master để tránh sau này có conflict quá nhiều.
※Có thể sử dụng git reset để đưa các thay đổi về trạng thái trước khi add. (git reset –soft sẽ đưa về trạng thái đã add chuẩn bị commit)
※Lưu ý cách này chỉ nên dùng khi bạn có 1 branch riêng. Nếu có ai đã checkout branch này của bạn thì khi bạn rebase làm thay đổi lịch sử commit của branch người đó sẽ ko thể pull được. (Nếu người đó chưa commit hay làm gì trên branch thì có thể xóa đi checkout lại để lấy branch mới nhất)