Nguồn
Git MERGE vs REBASE: Everything You Need to Know
Giới thiệu
Nếu bạn từng làm việc trong một git project với một đống branch, bạn chắc hẳn đã phải tìm cách để lấy các thay đổi trên feature branch thả vào main branch, hoặc giữ cho feature branch của bạn luôn cập nhật với main branch. Câu hỏi là, giờ nên xài git merge, git rebase hay squash commit?
Cập nhật feature branch với main branch
Giờ giả sử bạn tạo một feature branch mới từ main branch đi. Ta thêm các commit A, B và C trên feature branch này. Cùng lúc này thì main branch có thêm các commit D, E. Việc này giống như hai nhánh của một cái cây mọc ra hai hướng khác nhau ấy.
Việc cập nhật feature branch của bạn với main branch là một phần quan trọng của git workflow. Ta có thể làm được điều này với git merge hoặc git rebase.
git merge
Lệnh git merge sẽ pull những thay đổi mới nhất từ main branch về feature branch và tạo ra một merge commit. Nhìn nó giống việc lấy dây tạo ra một nút thắt để thắt 2 nhánh cây lại ấy.
git rebase
Lệnh git rebase sẽ thay đổi base của feature branch thành commit mới nhất trên main branch và đặt các thay đổi trong feature branch từ đó. Nó cho ta một lịch sử commit đẹp và thẳng. Nhiều người rất thích điều này.
Đưa feature branch về main branch
Khi dev xong thì ta sẽ muốn các thay đổi trên feature branch về lại main branch. Có một số cách như sau.
git merge
Đầu tiên là git merge. Git sẽ tạo ra một merge commit bao gồm lịch sử của cả hai branch, giống như tạo ra một cái nút thắt cho thấy hai branch này hợp vào nhau ở chỗ nào.
Nhưng mà nếu làm nhiều lần, ta sẽ có rất nhiều nút thắt như thế, làm lịch sử commit trở nên rối rắm.
git rebase
Cách tiếp theo là git rebase và forward merge. Ta có thể dùng git rebase để di chuyển các thay đổi từ feature branch về đầu (commit mới nhất) của main branch, sau đó thực hiện fast-forward merge. Làm cách này sẽ giúp lịch sử commit đẹp hơn.
Squash commit
Cách cuối là squash commit để thu tất cả các commit của feature branch thành một commit duy nhất rồi merge cái commit đó vào main branch. Cách này giúp lịch sử commit giữ được tính tuyến tính như rebase nhưng vẫn tạo ra một merge commit. Tuy nhiên, ta sẽ mất đi chi tiết các commit riêng lẻ đã thực hiện trước đó trong lịch sử commit của main branch.
Squash commit là cách khá phổ biến trên các nền tảng như GitHub vì nó cho phép ta dọn dẹp lịch sử commit trên main branch nhưng vẫn giữ được chi tiết lịch sử commit trên feature branch. Nó như kiểu kết hợp ấy.
Tổng kết
Kết lại,
- git merge giữ nguyên lịch sử commit của cả hai branch, và sự phát triển của các feature branch.
- git rebase dọn dẹp lịch sử commit bằng cách di chuyển các commit về đầu main branch.
- Squash commit gộp tất cả các commit làm một và tạo ra một lịch sử commit thẳng và đẹp nhưng cái giá phải trả là lịch sử commit chi tiết.
Dưới đây sẽ là tổng kết ưu và nhược điểm của mỗi cách. Không có cách nào là tốt cho mọi trường hợp cả. Cái nào tốt nhất cho bạn thì hãy dùng thôi.
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
cơ sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c/21c/23c/23ai, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, docker, k8s, micro service, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty