{"id":41591,"date":"2026-06-08T09:24:07","date_gmt":"2026-06-08T02:24:07","guid":{"rendered":"https:\/\/interdata.vn\/blog\/?p=41591"},"modified":"2026-06-08T09:24:07","modified_gmt":"2026-06-08T02:24:07","slug":"cac-lenh-git-co-ban","status":"publish","type":"post","link":"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/","title":{"rendered":"20+ C\u00e1c L\u1ec7nh Git C\u01a1 B\u1ea3n T\u1eeb A-Z: Cheat Sheet V\u00e0 H\u01b0\u1edbng D\u1eabn S\u1eed D\u1ee5ng (2026)"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-white ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">N\u1ed8I DUNG<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Git-La-Gi\" >Git L\u00e0 G\u00ec?<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Git-la-gi\" >Git l\u00e0 g\u00ec?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Vi-sao-Git-tro-thanh-tieu-chuan-cua-nganh-phan-mem\" >V\u00ec sao Git tr\u1edf th\u00e0nh ti\u00eau chu\u1ea9n c\u1ee7a ng\u00e0nh ph\u1ea7n m\u1ec1m?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Git-khac-gi-voi-Version-Control-System-VCS\" >Git kh\u00e1c g\u00ec v\u1edbi Version Control System (VCS)?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Git-Duoc-Su-Dung-Trong-Thuc-Te-Nhu-The-Nao\" >Git \u0110\u01b0\u1ee3c S\u1eed D\u1ee5ng Trong Th\u1ef1c T\u1ebf Nh\u01b0 Th\u1ebf N\u00e0o?<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Ca-nhan-phat-trien-phan-mem\" >C\u00e1 nh\u00e2n ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Lam-viec-nhom\" >L\u00e0m vi\u1ec7c nh\u00f3m<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#CICD-va-DevOps\" >CI\/CD v\u00e0 DevOps<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Git-Server-Self-hosted\" >Git Server Self-hosted<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Cai-Dat-Git-Va-Cau-Hinh-Ban-Dau\" >C\u00e0i \u0110\u1eb7t Git V\u00e0 C\u1ea5u H\u00ecnh Ban \u0110\u1ea7u<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Cai-Git-tren-Windows\" >C\u00e0i Git tr\u00ean Windows<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Cai-Git-tren-UbuntuDebian\" >C\u00e0i Git tr\u00ean Ubuntu\/Debian<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Cai-Git-tren-CentOSRocky-LinuxAlmaLinux\" >C\u00e0i Git tr\u00ean CentOS\/Rocky Linux\/AlmaLinux<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Kiem-tra-phien-ban-Git\" >Ki\u1ec3m tra phi\u00ean b\u1ea3n Git<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Cau-hinh-nguoi-dung-Git\" >C\u1ea5u h\u00ecnh ng\u01b0\u1eddi d\u00f9ng Git<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Kiem-tra-cau-hinh\" >Ki\u1ec3m tra c\u1ea5u h\u00ecnh<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Hieu-Git-Workflow-Truoc-Khi-Hoc-Lenh-Git\" >Hi\u1ec3u Git Workflow Tr\u01b0\u1edbc Khi H\u1ecdc L\u1ec7nh Git<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Git-Workflow-hoat-dong-nhu-the-nao\" >Git Workflow ho\u1ea1t \u0111\u1ed9ng nh\u01b0 th\u1ebf n\u00e0o?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Y-nghia-tung-thanh-phan\" >\u00dd ngh\u0129a t\u1eebng th\u00e0nh ph\u1ea7n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Quy-trinh-lam-viec-Git-co-ban\" >Quy tr\u00ecnh l\u00e0m vi\u1ec7c Git c\u01a1 b\u1ea3n<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Cac-Lenh-Git-Co-Ban-Quan-Trong-Nhat\" >C\u00e1c L\u1ec7nh Git C\u01a1 B\u1ea3n Quan Tr\u1ecdng Nh\u1ea5t<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-init-%E2%80%93-Khoi-tao-Repository\" >git init \u2013 Kh\u1edfi t\u1ea1o Repository<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-clone-%E2%80%93-Sao-chep-Repository\" >git clone \u2013 Sao ch\u00e9p Repository<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-status-%E2%80%93-Kiem-tra-trang-thai\" >git status \u2013 Ki\u1ec3m tra tr\u1ea1ng th\u00e1i<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-add-%E2%80%93-Dua-file-vao-Staging-Area\" >git add \u2013 \u0110\u01b0a file v\u00e0o Staging Area<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-commit-%E2%80%93-Tao-phien-ban-luu-tru\" >git commit \u2013 T\u1ea1o phi\u00ean b\u1ea3n l\u01b0u tr\u1eef<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-log-%E2%80%93-Xem-lich-su-commit\" >git log \u2013 Xem l\u1ecbch s\u1eed commit<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-diff-%E2%80%93-So-sanh-thay-doi\" >git diff \u2013 So s\u00e1nh thay \u0111\u1ed5i<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Cac-Lenh-Git-Branch-Co-Ban\" >C\u00e1c L\u1ec7nh Git Branch C\u01a1 B\u1ea3n<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-branch-%E2%80%93-Quan-ly-branch\" >git branch \u2013 Qu\u1ea3n l\u00fd branch<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-switch\" >git switch<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-checkout\" >git checkout<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-merge-%E2%80%93-Hop-nhat-cac-nhanh\" >git merge \u2013 H\u1ee3p nh\u1ea5t c\u00e1c nh\u00e1nh<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-branch-d-%E2%80%93-Xoa-branch\" >git branch -d \u2013 X\u00f3a branch<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Lam-Viec-Voi-Remote-Repository\" >L\u00e0m Vi\u1ec7c V\u1edbi Remote Repository<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Remote-Repository-la-gi\" >Remote Repository l\u00e0 g\u00ec?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-remote\" >git remote<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-38\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-remote-add\" >git remote add<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-39\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-push\" >git push<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-40\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-pull\" >git pull<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-41\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-fetch\" >git fetch<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-42\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#So-sanh-git-pull-va-git-fetch\" >So s\u00e1nh git pull v\u00e0 git fetch<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-43\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#GitHub-GitLab-Va-Git-Server-Rieng\" >GitHub, GitLab V\u00e0 Git Server Ri\u00eang<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-44\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#GitHub-la-gi\" >GitHub l\u00e0 g\u00ec?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-45\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#GitLab-la-gi\" >GitLab l\u00e0 g\u00ec?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-46\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Khi-nao-nen-dung-GitHub\" >Khi n\u00e0o n\u00ean d\u00f9ng GitHub?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-47\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Khi-nao-nen-dung-GitLab\" >Khi n\u00e0o n\u00ean d\u00f9ng GitLab?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-48\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Khi-nao-nen-Self-host-Git-Server\" >Khi n\u00e0o n\u00ean Self-host Git Server?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-49\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Bang-so-sanh-cac-giai-phap-luu-tru-Git\" >B\u1ea3ng so s\u00e1nh c\u00e1c gi\u1ea3i ph\u00e1p l\u01b0u tr\u1eef Git<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-50\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Hoan-Tac-Va-Khoi-Phuc-Thay-Doi-Trong-Git\" >Ho\u00e0n T\u00e1c V\u00e0 Kh\u00f4i Ph\u1ee5c Thay \u0110\u1ed5i Trong Git<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-51\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-restore\" >git restore<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-52\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-reset\" >git reset<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-53\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#git-revert\" >git revert<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-54\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Nen-dung-reset-hay-revert\" >N\u00ean d\u00f9ng reset hay revert?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-55\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Cac-Loi-Git-Thuong-Gap-Va-Cach-Khac-Phuc\" >C\u00e1c L\u1ed7i Git Th\u01b0\u1eddng G\u1eb7p V\u00e0 C\u00e1ch Kh\u1eafc Ph\u1ee5c<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-56\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Merge-Conflict-Xung-dot-khi-merge\" >Merge Conflict (Xung \u0111\u1ed9t khi merge)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-57\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Detached-HEAD\" >Detached HEAD<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-58\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Rejected-Push-Bi-tu-choi-day-code\" >Rejected Push (B\u1ecb t\u1eeb ch\u1ed1i \u0111\u1ea9y code)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-59\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Authentication-Failed-Loi-xac-thuc\" >Authentication Failed (L\u1ed7i x\u00e1c th\u1ef1c)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-60\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Branch-Khong-Dong-Bo\" >Branch Kh\u00f4ng \u0110\u1ed3ng B\u1ed9<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-61\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Xoa-nham-commit\" >X\u00f3a nh\u1ea7m commit<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-62\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Git-Cheat-Sheet-%E2%80%93-Tong-Hop-Cac-Lenh-Git-Thiet-Yeu\" >Git Cheat Sheet \u2013 T\u1ed5ng H\u1ee3p C\u00e1c L\u1ec7nh Git Thi\u1ebft Y\u1ebfu<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-63\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Bang-1-Lenh-Git-thiet-yeu\" >B\u1ea3ng 1: L\u1ec7nh Git thi\u1ebft y\u1ebfu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-64\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Bang-2-Lenh-quan-ly-nhanh-Branch\" >B\u1ea3ng 2: L\u1ec7nh qu\u1ea3n l\u00fd nh\u00e1nh (Branch)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-65\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Bang-3-Hoan-tac-va-khoi-phuc-Undo\" >B\u1ea3ng 3: Ho\u00e0n t\u00e1c v\u00e0 kh\u00f4i ph\u1ee5c (Undo)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-66\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Kinh-Nghiem-Su-Dung-Git-Hieu-Qua\" >Kinh Nghi\u1ec7m S\u1eed D\u1ee5ng Git Hi\u1ec7u Qu\u1ea3<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-67\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Commit-thuong-xuyen\" >Commit th\u01b0\u1eddng xuy\u00ean<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-68\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Viet-commit-message-ro-rang\" >Vi\u1ebft commit message r\u00f5 r\u00e0ng<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-69\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Khong-commit-file-nhay-cam\" >Kh\u00f4ng commit file nh\u1ea1y c\u1ea3m<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-70\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Su-dung-gitignore-dung-cach\" >S\u1eed d\u1ee5ng .gitignore \u0111\u00fang c\u00e1ch<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-71\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Luon-review-truoc-khi-push\" >Lu\u00f4n review tr\u01b0\u1edbc khi push<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-72\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Backup-repository-quan-trong\" >Backup repository quan tr\u1ecdng<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-73\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Bao-Mat-Khi-Su-Dung-Git\" >B\u1ea3o M\u1eadt Khi S\u1eed D\u1ee5ng Git<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-74\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Nhung-du-lieu-khong-nen-commit\" >Nh\u1eefng d\u1eef li\u1ec7u kh\u00f4ng n\u00ean commit<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-75\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Quan-ly-secrets\" >Qu\u1ea3n l\u00fd secrets<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-76\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#SSH-Key-thay-vi-Password\" >SSH Key thay v\u00ec Password<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-77\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Kiem-tra-lich-su-commit-de-tranh-lo-du-lieu\" >Ki\u1ec3m tra l\u1ecbch s\u1eed commit \u0111\u1ec3 tr\u00e1nh l\u1ed9 d\u1eef li\u1ec7u<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-78\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#Mot-So-Cau-Hoi-Thuong-Gap\" >M\u1ed9t S\u1ed1 C\u00e2u H\u1ecfi Th\u01b0\u1eddng G\u1eb7p<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-79\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#1-Git-va-GitHub-co-giong-nhau-khong\" >1. Git v\u00e0 GitHub c\u00f3 gi\u1ed1ng nhau kh\u00f4ng?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-80\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#2-Nguoi-moi-nen-hoc-GitHub-hay-Git-truoc\" >2. Ng\u01b0\u1eddi m\u1edbi n\u00ean h\u1ecdc GitHub hay Git tr\u01b0\u1edbc?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-81\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#3-Git-co-mien-phi-khong\" >3. Git c\u00f3 mi\u1ec5n ph\u00ed kh\u00f4ng?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-82\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#4-GitLab-co-thay-the-GitHub-duoc-khong\" >4. GitLab c\u00f3 thay th\u1ebf GitHub \u0111\u01b0\u1ee3c kh\u00f4ng?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-83\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#5-git-pull-va-git-fetch-khac-nhau-the-nao\" >5. git pull v\u00e0 git fetch kh\u00e1c nhau th\u1ebf n\u00e0o?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-84\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#6-Co-nen-dung-Git-cho-du-an-ca-nhan\" >6. C\u00f3 n\u00ean d\u00f9ng Git cho d\u1ef1 \u00e1n c\u00e1 nh\u00e2n?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-85\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#7-Git-co-chay-tren-VPS-duoc-khong\" >7. Git c\u00f3 ch\u1ea1y tr\u00ean VPS \u0111\u01b0\u1ee3c kh\u00f4ng?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-86\" href=\"https:\/\/interdata.vn\/blog\/cac-lenh-git-co-ban\/#8-Co-the-tu-xay-dung-Git-Server-rieng-khong\" >8. C\u00f3 th\u1ec3 t\u1ef1 x\u00e2y d\u1ef1ng Git Server ri\u00eang kh\u00f4ng?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<p>Trong k\u1ef7 nguy\u00ean ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m hi\u1ec7n \u0111\u1ea1i, vi\u1ec7c qu\u1ea3n l\u00fd <a href=\"https:\/\/interdata.vn\/blog\/source-code-la-gi\/\">m\u00e3 ngu\u1ed3n<\/a> hi\u1ec7u qu\u1ea3 kh\u00f4ng ch\u1ec9 l\u00e0 y\u00eau c\u1ea7u b\u1eaft bu\u1ed9c \u0111\u1ed1i v\u1edbi c\u00e1c <a href=\"https:\/\/interdata.vn\/blog\/lap-trinh-la-gi\/\">l\u1eadp tr\u00ecnh<\/a> vi\u00ean m\u00e0 c\u00f2n l\u00e0 n\u1ec1n t\u1ea3ng c\u1ed1t l\u00f5i c\u1ee7a quy tr\u00ecnh DevOps v\u00e0 <a href=\"https:\/\/interdata.vn\/blog\/ci-cd-la-gi\/\">CI\/CD<\/a>. Trong \u0111\u00f3, Git n\u1ed5i l\u00ean nh\u01b0 m\u1ed9t c\u00f4ng c\u1ee5 qu\u1ea3n l\u00fd phi\u00ean b\u1ea3n m\u00e3 ngu\u1ed3n ph\u1ed5 bi\u1ebfn h\u00e0ng \u0111\u1ea7u th\u1ebf gi\u1edbi.<\/p>\n<p>B\u00e0i vi\u1ebft n\u00e0y s\u1ebd cung c\u1ea5p m\u1ed9t h\u01b0\u1edbng d\u1eabn chi ti\u1ebft, d\u1ec5 hi\u1ec3u v\u1ec1 c\u00e1c l\u1ec7nh Git c\u01a1 b\u1ea3n t\u1eeb \u0111\u1ea7u \u0111\u1ebfn cu\u1ed1i, gi\u00fap b\u1ea1n l\u00e0m quen v\u00e0 t\u1ef1 tin \u00e1p d\u1ee5ng v\u00e0o c\u00e1c d\u1ef1 \u00e1n th\u1ef1c t\u1ebf.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-41594\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/06\/Cac-Lenh-Git-Co-Ban.jpg\" alt=\"C\u00e1c L\u1ec7nh Git C\u01a1 B\u1ea3n\" width=\"1000\" height=\"667\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/06\/Cac-Lenh-Git-Co-Ban.jpg 1000w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/06\/Cac-Lenh-Git-Co-Ban-300x200.jpg 300w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/06\/Cac-Lenh-Git-Co-Ban-768x512.jpg 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<hr \/>\n<h2><span class=\"ez-toc-section\" id=\"Git-La-Gi\"><\/span>Git L\u00e0 G\u00ec?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Git-la-gi\"><\/span>Git l\u00e0 g\u00ec?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Git l\u00e0 m\u1ed9t h\u1ec7 th\u1ed1ng qu\u1ea3n l\u00fd phi\u00ean b\u1ea3n ph\u00e2n t\u00e1n (Distributed Version Control System &#8211; DVCS) m\u00e3 ngu\u1ed3n m\u1edf v\u00e0 mi\u1ec5n ph\u00ed. \u0110\u01b0\u1ee3c kh\u1edfi x\u01b0\u1edbng b\u1edfi Linus Torvalds v\u00e0o n\u0103m 2005 (cha \u0111\u1ebb c\u1ee7a <a href=\"https:\/\/interdata.vn\/blog\/he-dieu-hanh\/\">h\u1ec7 \u0111i\u1ec1u h\u00e0nh<\/a> <a href=\"https:\/\/interdata.vn\/blog\/he-dieu-hanh-linux-la-gi\/\">Linux<\/a>), Git \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf \u0111\u1ec3 qu\u1ea3n l\u00fd c\u00e1c d\u1ef1 \u00e1n ph\u1ea7n m\u1ec1m t\u1eeb nh\u1ecf \u0111\u1ebfn r\u1ea5t l\u1edbn v\u1edbi t\u1ed1c \u0111\u1ed9 v\u00e0 hi\u1ec7u su\u1ea5t v\u01b0\u1ee3t tr\u1ed9i.<\/p>\n<p>Kh\u00e1c v\u1edbi c\u00e1c h\u1ec7 th\u1ed1ng qu\u1ea3n l\u00fd phi\u00ean b\u1ea3n t\u1eadp trung c\u0169, m\u1ed7i m\u00e1y t\u00ednh c\u1ee7a l\u1eadp tr\u00ecnh vi\u00ean khi s\u1eed d\u1ee5ng Git s\u1ebd ch\u1ee9a m\u1ed9t b\u1ea3n sao \u0111\u1ea7y \u0111\u1ee7 c\u1ee7a to\u00e0n b\u1ed9 l\u1ecbch s\u1eed m\u00e3 ngu\u1ed3n (Local Repository). \u0110i\u1ec1u n\u00e0y mang l\u1ea1i s\u1ef1 linh ho\u1ea1t t\u1ed1i \u0111a, cho ph\u00e9p b\u1ea1n l\u00e0m vi\u1ec7c offline v\u00e0 \u0111\u1ed3ng b\u1ed9 h\u00f3a l\u1ea1i v\u1edbi <a href=\"https:\/\/interdata.vn\/blog\/may-chu-server-la-gi\/\">m\u00e1y ch\u1ee7<\/a> chung b\u1ea5t c\u1ee9 l\u00fac n\u00e0o.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Vi-sao-Git-tro-thanh-tieu-chuan-cua-nganh-phan-mem\"><\/span>V\u00ec sao Git tr\u1edf th\u00e0nh ti\u00eau chu\u1ea9n c\u1ee7a ng\u00e0nh ph\u1ea7n m\u1ec1m?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Git \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng r\u1ed9ng r\u00e3i nh\u1edd s\u1edf h\u1eefu nhi\u1ec1u \u01b0u \u0111i\u1ec3m v\u01b0\u1ee3t tr\u1ed9i:<\/p>\n<ul>\n<li><strong>Qu\u1ea3n l\u00fd source code t\u1ed1i \u01b0u:<\/strong>\u00a0H\u1ed7 tr\u1ee3 theo d\u00f5i s\u00e1t sao t\u1eebng thay \u0111\u1ed5i nh\u1ecf trong m\u00e3 ngu\u1ed3n m\u00e0 kh\u00f4ng l\u00e0m x\u00e1o tr\u1ed9n c\u1ea5u tr\u00fac d\u1ef1 \u00e1n.<\/li>\n<li><strong>L\u00e0m vi\u1ec7c nh\u00f3m hi\u1ec7u qu\u1ea3:<\/strong>\u00a0Cho ph\u00e9p nhi\u1ec1u l\u1eadp tr\u00ecnh vi\u00ean c\u00f9ng l\u00e0m vi\u1ec7c tr\u00ean m\u1ed9t d\u1ef1 \u00e1n m\u00e0 kh\u00f4ng lo \u0111\u00e8 l\u00ean code c\u1ee7a nhau nh\u1edd c\u01a1 ch\u1ebf ph\u00e2n nh\u00e1nh (branching) v\u00e0 h\u1ee3p nh\u1ea5t (merging) th\u00f4ng minh.<\/li>\n<li><strong>Theo d\u00f5i l\u1ecbch s\u1eed thay \u0111\u1ed5i:<\/strong>\u00a0B\u1ea1n c\u00f3 th\u1ec3 bi\u1ebft ai \u0111\u00e3 thay \u0111\u1ed5i d\u00f2ng code n\u00e0o, v\u00e0o th\u1eddi \u0111i\u1ec3m n\u00e0o v\u00e0 l\u00fd do t\u1ea1i sao th\u00f4ng qua c\u00e1c th\u00f4ng \u0111i\u1ec7p ghi nh\u1eadn (commit message).<\/li>\n<li><strong>Kh\u00f4i ph\u1ee5c d\u1eef li\u1ec7u khi c\u00f3 l\u1ed7i:<\/strong>\u00a0D\u1ec5 d\u00e0ng quay l\u1ea1i b\u1ea5t k\u1ef3 phi\u00ean b\u1ea3n n\u00e0o trong qu\u00e1 kh\u1ee9 n\u1ebfu v\u00f4 t\u00ecnh x\u1ea3y ra l\u1ed7i trong qu\u00e1 tr\u00ecnh ph\u00e1t tri\u1ec3n.<\/li>\n<li><strong>H\u1ed7 tr\u1ee3 CI\/CD v\u00e0 DevOps:<\/strong>\u00a0H\u1ea7u h\u1ebft c\u00e1c c\u00f4ng c\u1ee5 t\u1ef1 \u0111\u1ed9ng h\u00f3a ng\u00e0y nay \u0111\u1ec1u t\u00edch h\u1ee3p tr\u1ef1c ti\u1ebfp v\u1edbi Git \u0111\u1ec3 k\u00edch ho\u1ea1t c\u00e1c ti\u1ebfn tr\u00ecnh build, test v\u00e0 deploy t\u1ef1 \u0111\u1ed9ng.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Git-khac-gi-voi-Version-Control-System-VCS\"><\/span>Git kh\u00e1c g\u00ec v\u1edbi Version Control System (VCS)?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0110\u1ec3 h\u00ecnh dung r\u00f5 h\u01a1n v\u1ec1 s\u1ef1 ti\u1ebfn h\u00f3a c\u1ee7a c\u00f4ng c\u1ee5 qu\u1ea3n l\u00fd m\u00e3 ngu\u1ed3n, h\u00e3y c\u00f9ng xem qua b\u1ea3ng so s\u00e1nh d\u01b0\u1edbi \u0111\u00e2y gi\u1eefa Git v\u00e0 c\u00e1c h\u1ec7 th\u1ed1ng VCS t\u1eadp trung truy\u1ec1n th\u1ed1ng nh\u01b0 SVN hay CVS:<\/p>\n<table>\n<thead>\n<tr>\n<th align=\"left\">Ti\u00eau ch\u00ed<\/th>\n<th align=\"left\">Git<\/th>\n<th align=\"left\">SVN<\/th>\n<th align=\"left\">CVS<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\"><strong>Ki\u1ebfn tr\u00fac<\/strong><\/td>\n<td align=\"left\">Ph\u00e2n t\u00e1n (Distributed)<\/td>\n<td align=\"left\">T\u1eadp trung (Centralized)<\/td>\n<td align=\"left\">T\u1eadp trung (Centralized)<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>L\u00e0m vi\u1ec7c Offline<\/strong><\/td>\n<td align=\"left\">C\u00f3 (\u0110\u1ea7y \u0111\u1ee7 t\u00ednh n\u0103ng tr\u00ean m\u00e1y c\u1ee5c b\u1ed9)<\/td>\n<td align=\"left\">H\u1ea1n ch\u1ebf (C\u1ea7n k\u1ebft n\u1ed1i m\u00e1y ch\u1ee7 trung t\u00e2m)<\/td>\n<td align=\"left\">H\u1ea1n ch\u1ebf (C\u1ea7n k\u1ebft n\u1ed1i m\u00e1y ch\u1ee7 trung t\u00e2m)<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Ph\u00e2n nh\u00e1nh (Branching)<\/strong><\/td>\n<td align=\"left\">R\u1ea5t nhanh v\u00e0 nh\u1eb9 nh\u00e0ng<\/td>\n<td align=\"left\">Ch\u1eadm v\u00e0 t\u1ed1n t\u00e0i nguy\u00ean<\/td>\n<td align=\"left\">Kh\u00f3 kh\u0103n v\u00e0 h\u1ea1n ch\u1ebf<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>\u0110\u1ed9 ph\u1ed5 bi\u1ebfn hi\u1ec7n nay<\/strong><\/td>\n<td align=\"left\">R\u1ea5t cao (H\u01a1n 90% d\u1ef1 \u00e1n ph\u1ea7n m\u1ec1m)<\/td>\n<td align=\"left\">Trung b\u00ecnh (D\u1ef1 \u00e1n legacy c\u0169)<\/td>\n<td align=\"left\">Th\u1ea5p (\u00cdt c\u00f2n s\u1eed d\u1ee5ng)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h2><span class=\"ez-toc-section\" id=\"Git-Duoc-Su-Dung-Trong-Thuc-Te-Nhu-The-Nao\"><\/span>Git \u0110\u01b0\u1ee3c S\u1eed D\u1ee5ng Trong Th\u1ef1c T\u1ebf Nh\u01b0 Th\u1ebf N\u00e0o?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Ca-nhan-phat-trien-phan-mem\"><\/span>C\u00e1 nh\u00e2n ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ngay c\u1ea3 khi l\u00e0m vi\u1ec7c \u0111\u1ed9c l\u1eadp, Git v\u1eabn mang l\u1ea1i gi\u00e1 tr\u1ecb r\u1ea5t l\u1edbn. B\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng Git \u0111\u1ec3 l\u01b0u tr\u1eef l\u1ecbch s\u1eed ph\u00e1t tri\u1ec3n c\u1ee7a c\u00e1c d\u1ef1 \u00e1n c\u00e1 nh\u00e2n nh\u01b0:<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/interdata.vn\/blog\/website-la-gi\/\">Website<\/a> <a href=\"https:\/\/interdata.vn\/blog\/wordpress-la-gi\/\">WordPress<\/a>:<\/strong>\u00a0Theo d\u00f5i c\u00e1c t\u00f9y bi\u1ebfn trong <a href=\"https:\/\/interdata.vn\/blog\/theme-la-gi\/\">theme<\/a>, <a href=\"https:\/\/interdata.vn\/blog\/plugin-la-gi\/\">plugin<\/a> ho\u1eb7c c\u1ea5u h\u00ecnh h\u1ec7 th\u1ed1ng.<\/li>\n<li><strong>D\u1ef1 \u00e1n <a href=\"https:\/\/interdata.vn\/blog\/laravel-la-gi\/\">Laravel<\/a>, Node.js, Python:<\/strong>\u00a0Qu\u1ea3n l\u00fd m\u00e3 ngu\u1ed3n qua c\u00e1c giai \u0111o\u1ea1n ph\u00e1t tri\u1ec3n t\u1eeb th\u1eed nghi\u1ec7m \u0111\u1ebfn ho\u00e0n thi\u1ec7n s\u1ea3n ph\u1ea9m.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Lam-viec-nhom\"><\/span>L\u00e0m vi\u1ec7c nh\u00f3m<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Trong m\u00f4i tr\u01b0\u1eddng doanh nghi\u1ec7p ho\u1eb7c c\u00e1c d\u1ef1 \u00e1n m\u00e3 ngu\u1ed3n m\u1edf, Git \u0111\u00f3ng vai tr\u00f2 c\u1ea7u n\u1ed1i:<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/interdata.vn\/blog\/front-end-la-gi\/\">Frontend<\/a> Team:<\/strong>\u00a0Ph\u00e1t tri\u1ec3n giao di\u1ec7n tr\u00ean c\u00e1c nh\u00e1nh t\u00ednh n\u0103ng (feature branch) \u0111\u1ed9c l\u1eadp.<\/li>\n<li><strong>Backend Team:<\/strong>\u00a0X\u00e2y d\u1ef1ng API v\u00e0 c\u01a1 s\u1edf d\u1eef li\u1ec7u tr\u00ean c\u00e1c nh\u00e1nh t\u01b0\u01a1ng \u1ee9ng.<\/li>\n<li><strong>DevOps Team:<\/strong>\u00a0\u0110\u1ea3m b\u1ea3o m\u00e3 ngu\u1ed3n t\u1eeb c\u00e1c team \u0111\u01b0\u1ee3c ki\u1ec3m tra v\u00e0 t\u00edch h\u1ee3p an to\u00e0n tr\u01b0\u1edbc khi \u0111\u01b0a l\u00ean m\u00f4i tr\u01b0\u1eddng s\u1ea3n xu\u1ea5t (Production).<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"CICD-va-DevOps\"><\/span>CI\/CD v\u00e0 DevOps<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Git \u0111\u00f3ng vai tr\u00f2 l\u00e0 &#8220;ngu\u1ed3n g\u1ed1c c\u1ee7a s\u1ef1 th\u1eadt&#8221; (Single Source of Truth) trong h\u1ea1 t\u1ea7ng DevOps. M\u1ed7i h\u00e0nh \u0111\u1ed9ng \u0111\u1ea9y m\u00e3 ngu\u1ed3n l\u00ean Git (Push) ho\u1eb7c t\u1ea1o y\u00eau c\u1ea7u h\u1ee3p nh\u1ea5t (Merge Request) c\u00f3 th\u1ec3 k\u00edch ho\u1ea1t t\u1ef1 \u0111\u1ed9ng c\u00e1c chu k\u1ef3 ki\u1ec3m th\u1eed v\u00e0 tri\u1ec3n khai th\u00f4ng qua:<\/p>\n<ul>\n<li><strong>GitHub Actions<\/strong><\/li>\n<li><strong>GitLab CI\/CD<\/strong><\/li>\n<li><strong>Jenkins<\/strong><\/li>\n<li><strong>ArgoCD, FluxCD<\/strong>\u00a0(\u00e1p d\u1ee5ng m\u00f4 h\u00ecnh GitOps ti\u00ean ti\u1ebfn)<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Git-Server-Self-hosted\"><\/span>Git Server Self-hosted<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>B\u00ean c\u1ea1nh vi\u1ec7c s\u1eed d\u1ee5ng c\u00e1c d\u1ecbch v\u1ee5 <a href=\"https:\/\/interdata.vn\/blog\/public-cloud-la-gi\/\">\u0111\u00e1m m\u00e2y c\u00f4ng c\u1ed9ng<\/a>, nhi\u1ec1u t\u1ed5 ch\u1ee9c t\u1ef1 v\u1eadn h\u00e0nh h\u1ec7 th\u1ed1ng Git Server n\u1ed9i b\u1ed9 \u0111\u1ec3 b\u1ea3o m\u1eadt d\u1eef li\u1ec7u tuy\u1ec7t \u0111\u1ed1i:<\/p>\n<ul>\n<li><strong>GitHub Enterprise<\/strong>\u00a0ho\u1eb7c\u00a0<strong>GitLab Self-managed<\/strong>\u00a0cho quy m\u00f4 doanh nghi\u1ec7p l\u1edbn.<\/li>\n<li><strong>Gitea<\/strong>\u00a0ho\u1eb7c\u00a0<strong>Forgejo<\/strong>\u00a0cho c\u00e1c h\u1ec7 th\u1ed1ng g\u1ecdn nh\u1eb9, ti\u00eau t\u1ed1n \u00edt t\u00e0i nguy\u00ean nh\u01b0ng v\u1eabn \u0111\u1ea7y \u0111\u1ee7 t\u00ednh n\u0103ng c\u1ed1t l\u00f5i.<\/li>\n<\/ul>\n<hr \/>\n<h2><span class=\"ez-toc-section\" id=\"Cai-Dat-Git-Va-Cau-Hinh-Ban-Dau\"><\/span>C\u00e0i \u0110\u1eb7t Git V\u00e0 C\u1ea5u H\u00ecnh Ban \u0110\u1ea7u<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0110\u1ec3 b\u1eaft \u0111\u1ea7u l\u00e0m vi\u1ec7c, b\u1ea1n c\u1ea7n c\u00e0i \u0111\u1eb7t Git l\u00ean h\u1ec7 \u0111i\u1ec1u h\u00e0nh \u0111ang s\u1eed d\u1ee5ng.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Cai-Git-tren-Windows\"><\/span>C\u00e0i Git tr\u00ean Windows<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Tr\u00ean Windows, c\u00e1ch nhanh nh\u1ea5t hi\u1ec7n nay l\u00e0 s\u1eed d\u1ee5ng tr\u00ecnh qu\u1ea3n l\u00fd g\u00f3i Winget tr\u1ef1c ti\u1ebfp t\u1eeb Command Prompt ho\u1eb7c PowerShell:<\/p>\n<pre><code class=\"language-bash\">winget install Git.Git\r\n<\/code><\/pre>\n<p><em>Ho\u1eb7c b\u1ea1n c\u00f3 th\u1ec3 t\u1ea3i b\u1ed9 c\u00e0i \u0111\u1eb7t giao di\u1ec7n truy\u1ec1n th\u1ed1ng\u00a0<code>.exe<\/code>\u00a0t\u1eeb <a href=\"https:\/\/interdata.vn\/blog\/homepage-la-gi\/\">trang ch\u1ee7<\/a>\u00a0<code>git-scm.com<\/code>.<\/em><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Cai-Git-tren-UbuntuDebian\"><\/span>C\u00e0i Git tr\u00ean Ubuntu\/Debian<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>M\u1edf Terminal c\u1ee7a b\u1ea1n v\u00e0 ch\u1ea1y c\u00e1c l\u1ec7nh sau \u0111\u1ec3 c\u1eadp nh\u1eadt h\u1ec7 th\u1ed1ng v\u00e0 c\u00e0i \u0111\u1eb7t Git:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\r\nsudo apt install git -y\r\n<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Cai-Git-tren-CentOSRocky-LinuxAlmaLinux\"><\/span>C\u00e0i Git tr\u00ean CentOS\/Rocky Linux\/AlmaLinux<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>V\u1edbi c\u00e1c b\u1ea3n ph\u00e2n ph\u1ed1i Linux s\u1eed d\u1ee5ng tr\u00ecnh qu\u1ea3n l\u00fd g\u00f3i DNF\/YUM, b\u1ea1n d\u00f9ng l\u1ec7nh sau:<\/p>\n<pre><code class=\"language-bash\">sudo dnf install git -y\r\n<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Kiem-tra-phien-ban-Git\"><\/span>Ki\u1ec3m tra phi\u00ean b\u1ea3n Git<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Sau khi c\u00e0i \u0111\u1eb7t xong, h\u00e3y x\u00e1c minh xem h\u1ec7 th\u1ed1ng \u0111\u00e3 nh\u1eadn di\u1ec7n \u0111\u01b0\u1ee3c Git hay ch\u01b0a b\u1eb1ng l\u1ec7nh:<\/p>\n<pre><code class=\"language-bash\">git --version\r\n<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Cau-hinh-nguoi-dung-Git\"><\/span>C\u1ea5u h\u00ecnh ng\u01b0\u1eddi d\u00f9ng Git<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0110\u00e2y l\u00e0 b\u01b0\u1edbc b\u1eaft bu\u1ed9c ngay sau khi c\u00e0i \u0111\u1eb7t. Th\u00f4ng tin n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c \u0111\u00ednh k\u00e8m v\u00e0o m\u1ecdi commit m\u00e0 b\u1ea1n th\u1ef1c hi\u1ec7n \u0111\u1ec3 m\u1ecdi ng\u01b0\u1eddi bi\u1ebft ai l\u00e0 t\u00e1c gi\u1ea3 c\u1ee7a thay \u0111\u1ed5i \u0111\u00f3.<\/p>\n<pre><code class=\"language-bash\">git config --global user.name \"Nguyen Van A\"\r\ngit config --global user.email \"abc@gmail.com\"\r\n<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Kiem-tra-cau-hinh\"><\/span>Ki\u1ec3m tra c\u1ea5u h\u00ecnh<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>B\u1ea1n c\u00f3 th\u1ec3 li\u1ec7t k\u00ea l\u1ea1i to\u00e0n b\u1ed9 c\u00e1c c\u1ea5u h\u00ecnh \u0111\u00e3 thi\u1ebft l\u1eadp b\u1eb1ng l\u1ec7nh:<\/p>\n<pre><code class=\"language-bash\">git config --list\r\n<\/code><\/pre>\n<hr \/>\n<h2><span class=\"ez-toc-section\" id=\"Hieu-Git-Workflow-Truoc-Khi-Hoc-Lenh-Git\"><\/span>Hi\u1ec3u Git Workflow Tr\u01b0\u1edbc Khi H\u1ecdc L\u1ec7nh Git<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Tr\u01b0\u1edbc khi g\u00f5 c\u00e1c d\u00f2ng l\u1ec7nh, vi\u1ec7c n\u1eafm r\u00f5 c\u00e1ch th\u1ee9c lu\u00e2n <a href=\"https:\/\/interdata.vn\/blog\/data-migration-la-gi\/\">chuy\u1ec3n d\u1eef li\u1ec7u<\/a> trong Git s\u1ebd gi\u00fap b\u1ea1n tr\u00e1nh \u0111\u01b0\u1ee3c nh\u1eefng nh\u1ea7m l\u1eabn kh\u00f4ng \u0111\u00e1ng c\u00f3.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Git-Workflow-hoat-dong-nhu-the-nao\"><\/span>Git Workflow ho\u1ea1t \u0111\u1ed9ng nh\u01b0 th\u1ebf n\u00e0o?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Quy tr\u00ecnh qu\u1ea3n l\u00fd file c\u1ee7a Git tr\u1ea3i qua 4 khu v\u1ef1c ch\u00ednh theo s\u01a1 \u0111\u1ed3 sau:<\/p>\n<pre><code class=\"language-text\">[ Working Directory ] \u2500\u2500( git add )\u2500\u2500&gt; [ Staging Area ] \u2500\u2500( git commit )\u2500\u2500&gt; [ Local Repository ] \u2500\u2500( git push )\u2500\u2500&gt; [ Remote Repository ]\r\n<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Y-nghia-tung-thanh-phan\"><\/span>\u00dd ngh\u0129a t\u1eebng th\u00e0nh ph\u1ea7n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><strong>Working Directory (Th\u01b0 m\u1ee5c l\u00e0m vi\u1ec7c):<\/strong>\u00a0N\u01a1i ch\u1ee9a c\u00e1c file th\u1ef1c t\u1ebf tr\u00ean \u1ed5 c\u1ee9ng m\u00e1y t\u00ednh m\u00e0 b\u1ea1n \u0111ang tr\u1ef1c ti\u1ebfp ch\u1ec9nh s\u1eeda b\u1eb1ng code editor (nh\u01b0 VS Code, Cursor).<\/li>\n<li><strong>Staging Area (Khu v\u1ef1c ch\u1edd):<\/strong>\u00a0N\u01a1i chu\u1ea9n b\u1ecb d\u1eef li\u1ec7u. Khi b\u1ea1n thay \u0111\u1ed5i m\u1ed9t file v\u00e0 mu\u1ed1n l\u01b0u l\u1ea1i, b\u1ea1n \u0111\u01b0a n\u00f3 v\u00e0o \u0111\u00e2y \u0111\u1ec3 Git ghi nh\u1eadn r\u1eb1ng file n\u00e0y \u0111\u00e3 s\u1eb5n s\u00e0ng \u0111\u1ec3 t\u1ea1o phi\u00ean b\u1ea3n m\u1edbi.<\/li>\n<li><strong>Local Repository (Kho l\u01b0u tr\u1eef c\u1ee5c b\u1ed9):<\/strong>\u00a0N\u01a1i l\u01b0u tr\u1eef t\u1ea5t c\u1ea3 l\u1ecbch s\u1eed v\u00e0 c\u00e1c phi\u00ean b\u1ea3n \u0111\u00e3 commit tr\u1ef1c ti\u1ebfp tr\u00ean m\u00e1y c\u1ee7a b\u1ea1n (n\u1eb1m trong th\u01b0 m\u1ee5c \u1ea9n\u00a0<code>.git<\/code>).<\/li>\n<li><strong>Remote Repository (Kho l\u01b0u tr\u1eef t\u1eeb xa):<\/strong>\u00a0Kho ch\u1ee9a m\u00e3 ngu\u1ed3n n\u1eb1m tr\u00ean c\u00e1c <a href=\"https:\/\/interdata.vn\/blog\/cloud-server-may-chu-dam-may\/\">m\u00e1y ch\u1ee7 \u0111\u00e1m m\u00e2y<\/a> ho\u1eb7c m\u00e1y ch\u1ee7 n\u1ed9i b\u1ed9 (nh\u01b0 GitHub, GitLab, server ri\u00eang) gi\u00fap \u0111\u1ed3ng b\u1ed9 h\u00f3a v\u1edbi c\u00e1c th\u00e0nh vi\u00ean kh\u00e1c trong nh\u00f3m.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Quy-trinh-lam-viec-Git-co-ban\"><\/span>Quy tr\u00ecnh l\u00e0m vi\u1ec7c Git c\u01a1 b\u1ea3n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li><strong>T\u1ea1o\/Ch\u1ec9nh s\u1eeda file<\/strong>\u00a0trong th\u01b0 m\u1ee5c l\u00e0m vi\u1ec7c (Working Directory).<\/li>\n<li>D\u00f9ng l\u1ec7nh\u00a0<code>git add<\/code>\u00a0\u0111\u1ec3 chuy\u1ec3n c\u00e1c file mu\u1ed1n l\u01b0u tr\u1eef sang khu v\u1ef1c ch\u1edd (Staging Area).<\/li>\n<li>D\u00f9ng l\u1ec7nh\u00a0<code>git commit<\/code>\u00a0\u0111\u1ec3 l\u01b0u v\u0129nh vi\u1ec5n tr\u1ea1ng th\u00e1i \u0111\u00f3 v\u00e0o kho l\u01b0u tr\u1eef c\u1ee5c b\u1ed9 (Local Repository).<\/li>\n<li>D\u00f9ng l\u1ec7nh\u00a0<code>git push<\/code>\u00a0\u0111\u1ec3 \u0111\u1ea9y c\u00e1c thay \u0111\u1ed5i l\u00ean kho ch\u1ee9a tr\u1ef1c tuy\u1ebfn (Remote Repository).<\/li>\n<li>Th\u00e0nh vi\u00ean kh\u00e1c trong nh\u00f3m s\u1ebd d\u00f9ng\u00a0<code>git pull<\/code>\u00a0\u0111\u1ec3 c\u1eadp nh\u1eadt c\u00e1c thay \u0111\u1ed5i m\u1edbi nh\u1ea5t v\u1ec1 m\u00e1y c\u1ee7a h\u1ecd.<\/li>\n<\/ol>\n<hr \/>\n<h2><span class=\"ez-toc-section\" id=\"Cac-Lenh-Git-Co-Ban-Quan-Trong-Nhat\"><\/span>C\u00e1c L\u1ec7nh Git C\u01a1 B\u1ea3n Quan Tr\u1ecdng Nh\u1ea5t<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"git-init-%E2%80%93-Khoi-tao-Repository\"><\/span>git init \u2013 Kh\u1edfi t\u1ea1o Repository<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>L\u1ec7nh n\u00e0y d\u00f9ng \u0111\u1ec3 t\u1ea1o m\u1ed9t kho l\u01b0u tr\u1eef Git m\u1edbi ngay t\u1ea1i th\u01b0 m\u1ee5c hi\u1ec7n h\u00e0nh. Sau khi ch\u1ea1y, m\u1ed9t th\u01b0 m\u1ee5c \u1ea9n c\u00f3 t\u00ean\u00a0<code>.git<\/code>\u00a0s\u1ebd \u0111\u01b0\u1ee3c kh\u1edfi t\u1ea1o \u0111\u1ec3 theo d\u00f5i m\u1ecdi bi\u1ebfn \u0111\u1ed9ng c\u1ee7a d\u1ef1 \u00e1n.<\/p>\n<pre><code class=\"language-bash\">git init\r\n<\/code><\/pre>\n<ul>\n<li><strong>Khi n\u00e0o d\u00f9ng?<\/strong>\u00a0Khi b\u1ea1n b\u1eaft \u0111\u1ea7u m\u1ed9t d\u1ef1 \u00e1n m\u1edbi ho\u00e0n to\u00e0n t\u1eeb m\u00e1y c\u1ee5c b\u1ed9 v\u00e0 mu\u1ed1n qu\u1ea3n l\u00fd n\u00f3 b\u1eb1ng Git.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"git-clone-%E2%80%93-Sao-chep-Repository\"><\/span>git clone \u2013 Sao ch\u00e9p Repository<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>D\u00f9ng \u0111\u1ec3 t\u1ea3i m\u1ed9t d\u1ef1 \u00e1n \u0111\u00e3 c\u00f3 s\u1eb5n t\u1eeb Remote Repository v\u1ec1 m\u00e1y t\u00ednh c\u1ee7a b\u1ea1n.<\/p>\n<pre><code class=\"language-bash\">git clone https:\/\/github.com\/example\/project.git\r\n<\/code><\/pre>\n<ul>\n<li><strong>V\u00ed d\u1ee5 th\u1ef1c t\u1ebf:<\/strong>\u00a0B\u1ea1n c\u00f3 th\u1ec3 clone t\u1eeb c\u00e1c n\u1ec1n t\u1ea3ng \u0111\u00e1m m\u00e2y c\u00f4ng c\u1ed9ng (GitHub, GitLab) ho\u1eb7c c\u00e1c Git Server n\u1ed9i b\u1ed9 c\u1ee7a doanh nghi\u1ec7p b\u1eb1ng c\u1ea3 giao th\u1ee9c HTTPS ho\u1eb7c SSH.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"git-status-%E2%80%93-Kiem-tra-trang-thai\"><\/span>git status \u2013 Ki\u1ec3m tra tr\u1ea1ng th\u00e1i<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0110\u00e2y l\u00e0 l\u1ec7nh \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng nhi\u1ec1u nh\u1ea5t \u0111\u1ec3 xem tr\u1ea1ng th\u00e1i hi\u1ec7n t\u1ea1i c\u1ee7a th\u01b0 m\u1ee5c l\u00e0m vi\u1ec7c v\u00e0 khu v\u1ef1c ch\u1edd.<\/p>\n<pre><code class=\"language-bash\">git status\r\n<\/code><\/pre>\n<p>C\u00e1c tr\u1ea1ng th\u00e1i ch\u00ednh c\u1ee7a file m\u00e0 b\u1ea1n th\u01b0\u1eddng g\u1eb7p bao g\u1ed3m:<\/p>\n<ul>\n<li><strong>Untracked:<\/strong>\u00a0File m\u1edbi \u0111\u01b0\u1ee3c t\u1ea1o v\u00e0 ch\u01b0a t\u1eebng \u0111\u01b0\u1ee3c Git theo d\u00f5i.<\/li>\n<li><strong>Modified:<\/strong>\u00a0File \u0111\u00e3 \u0111\u01b0\u1ee3c theo d\u00f5i nh\u01b0ng c\u00f3 s\u1ef1 thay \u0111\u1ed5i n\u1ed9i dung ch\u01b0a \u0111\u01b0a v\u00e0o Staging Area.<\/li>\n<li><strong>Staged:<\/strong>\u00a0File \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u01b0a v\u00e0o Staging Area b\u1eb1ng l\u1ec7nh\u00a0<code>git add<\/code>, s\u1eb5n s\u00e0ng cho l\u01b0\u1ee3t commit ti\u1ebfp theo.<\/li>\n<li><strong>Committed:<\/strong>\u00a0C\u00e1c thay \u0111\u1ed5i \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u an to\u00e0n v\u00e0o c\u01a1 s\u1edf d\u1eef li\u1ec7u c\u1ee7a Git.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"git-add-%E2%80%93-Dua-file-vao-Staging-Area\"><\/span>git add \u2013 \u0110\u01b0a file v\u00e0o Staging Area<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>L\u1ec7nh n\u00e0y gi\u00fap chuy\u1ec3n c\u00e1c thay \u0111\u1ed5i t\u1eeb th\u01b0 m\u1ee5c l\u00e0m vi\u1ec7c v\u00e0o khu v\u1ef1c ch\u1edd (Staging Area).<\/p>\n<ul>\n<li>Th\u00eam m\u1ed9t file c\u1ee5 th\u1ec3:\n<pre><code class=\"language-bash\">git add filename.txt\r\n<\/code><\/pre>\n<\/li>\n<li>Th\u00eam to\u00e0n b\u1ed9 c\u00e1c file c\u00f3 thay \u0111\u1ed5i trong th\u01b0 m\u1ee5c hi\u1ec7n t\u1ea1i:\n<pre><code class=\"language-bash\">git add .\r\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"git-commit-%E2%80%93-Tao-phien-ban-luu-tru\"><\/span>git commit \u2013 T\u1ea1o phi\u00ean b\u1ea3n l\u01b0u tr\u1eef<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ghi nh\u1eadn c\u00e1c thay \u0111\u1ed5i \u0111ang n\u1eb1m trong Staging Area v\u00e0o l\u1ecbch s\u1eed c\u1ee7a Local Repository.<\/p>\n<pre><code class=\"language-bash\">git commit -m \"Add login <a href=\"https:\/\/interdata.vn\/blog\/page-la-gi\/\">page<\/a> feature\"\r\n<\/code><\/pre>\n<ul>\n<li><strong>Quy t\u1eafc \u0111\u1eb7t commit message t\u1ed1t:<\/strong>\u00a0H\u00e3y vi\u1ebft ng\u1eafn g\u1ecdn, s\u00fac t\u00edch v\u00e0 th\u1ec3 hi\u1ec7n r\u00f5 h\u00e0nh \u0111\u1ed9ng \u1edf th\u1ec3 ch\u1ee7 \u0111\u1ed9ng (v\u00ed d\u1ee5:\u00a0<code>Add...<\/code>,\u00a0<code>Fix...<\/code>,\u00a0<code>Update...<\/code>\u00a0thay v\u00ec vi\u1ebft qu\u00e1 chung chung nh\u01b0\u00a0<code>Fix bug<\/code>,\u00a0<code>Update code<\/code>).<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"git-log-%E2%80%93-Xem-lich-su-commit\"><\/span>git log \u2013 Xem l\u1ecbch s\u1eed commit<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Hi\u1ec3n th\u1ecb danh s\u00e1ch c\u00e1c commit \u0111\u00e3 \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n trong d\u1ef1 \u00e1n theo th\u1ee9 t\u1ef1 th\u1eddi gian ng\u01b0\u1ee3c (m\u1edbi nh\u1ea5t \u1edf tr\u00ean c\u00f9ng).<\/p>\n<pre><code class=\"language-bash\">git log\r\n<\/code><\/pre>\n<p>\u0110\u1ec3 xem l\u1ecbch s\u1eed d\u01b0\u1edbi d\u1ea1ng r\u00fat g\u1ecdn tr\u00ean m\u1ed9t d\u00f2ng cho d\u1ec5 theo d\u00f5i, b\u1ea1n s\u1eed d\u1ee5ng:<\/p>\n<pre><code class=\"language-bash\">git log --oneline\r\n<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"git-diff-%E2%80%93-So-sanh-thay-doi\"><\/span>git diff \u2013 So s\u00e1nh thay \u0111\u1ed5i<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Gi\u00fap b\u1ea1n xem chi ti\u1ebft nh\u1eefng d\u00f2ng code n\u00e0o \u0111\u00e3 b\u1ecb x\u00f3a \u0111i ho\u1eb7c \u0111\u01b0\u1ee3c th\u00eam m\u1edbi tr\u01b0\u1edbc khi quy\u1ebft \u0111\u1ecbnh \u0111\u01b0a ch\u00fang v\u00e0o Staging Area ho\u1eb7c Commit.<\/p>\n<ul>\n<li>So s\u00e1nh s\u1ef1 kh\u00e1c bi\u1ec7t gi\u1eefa th\u01b0 m\u1ee5c l\u00e0m vi\u1ec7c v\u00e0 Staging Area:\n<pre><code class=\"language-bash\">git diff\r\n<\/code><\/pre>\n<\/li>\n<li>So s\u00e1nh s\u1ef1 kh\u00e1c bi\u1ec7t gi\u1eefa Staging Area v\u00e0 commit g\u1ea7n nh\u1ea5t:\n<pre><code class=\"language-bash\">git diff --staged\r\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<hr \/>\n<div style=\"border-left: 4px solid #0A4FF6; padding: 16px 20px; margin: 24px 0; background: #F5F8FF; border-radius: 8px; color: #0a1a3a;\">N\u1ebfu b\u1ea1n \u0111ang l\u01b0u tr\u1eef source code, tri\u1ec3n khai m\u00f4i tr\u01b0\u1eddng test ho\u1eb7c x\u00e2y d\u1ef1ng Git Server n\u1ed9i b\u1ed9 cho nh\u00f3m ph\u00e1t tri\u1ec3n, m\u1ed9t <a href=\"https:\/\/interdata.vn\/blog\/vps-la-gi\/\">VPS<\/a> \u1ed5n \u0111\u1ecbnh s\u1ebd gi\u00fap ki\u1ec3m so\u00e1t to\u00e0n b\u1ed9 h\u1ea1 t\u1ea7ng thay v\u00ec ph\u1ee5 thu\u1ed9c ho\u00e0n to\u00e0n v\u00e0o d\u1ecbch v\u1ee5 b\u00ean th\u1ee9 ba. <strong>Tham kh\u1ea3o d\u1ecbch v\u1ee5 <a href=\"https:\/\/interdata.vn\/thue-vps\/#gia-re\" target=\"_blank\" rel=\"noopener\">thu\u00ea VPS gi\u00e1 r\u1ebb<\/a> t\u1ea1i InterData v\u1edbi <a href=\"https:\/\/interdata.vn\/blog\/cpu-server\/\">CPU<\/a> th\u1ebf h\u1ec7 m\u1edbi, SSD NVMe U.2, m\u1ea1ng t\u1ed1c \u0111\u1ed9 cao v\u00e0 chi ph\u00ed t\u1ed1i \u01b0u \u0111\u1ec3 tri\u1ec3n khai GitLab, Gitea, CI\/CD ho\u1eb7c m\u00f4i tr\u01b0\u1eddng DevOps ri\u00eang<\/strong><\/div>\n<hr \/>\n<h2><span class=\"ez-toc-section\" id=\"Cac-Lenh-Git-Branch-Co-Ban\"><\/span>C\u00e1c L\u1ec7nh Git Branch C\u01a1 B\u1ea3n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Ph\u00e2n nh\u00e1nh (Branching) l\u00e0 t\u00ednh n\u0103ng m\u1ea1nh m\u1ebd gi\u00fap b\u1ea1n t\u00e1ch bi\u1ec7t c\u00e1c ph\u1ea7n vi\u1ec7c kh\u00e1c nhau (nh\u01b0 s\u1eeda l\u1ed7i, ph\u00e1t tri\u1ec3n t\u00ednh n\u0103ng m\u1edbi) m\u00e0 kh\u00f4ng l\u00e0m \u1ea3nh h\u01b0\u1edfng \u0111\u1ebfn lu\u1ed3ng code ch\u00ednh (nh\u00e1nh\u00a0<code>main<\/code>\u00a0ho\u1eb7c\u00a0<code>master<\/code>).<\/p>\n<h3><span class=\"ez-toc-section\" id=\"git-branch-%E2%80%93-Quan-ly-branch\"><\/span>git branch \u2013 Qu\u1ea3n l\u00fd branch<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Li\u1ec7t k\u00ea to\u00e0n b\u1ed9 c\u00e1c nh\u00e1nh hi\u1ec7n c\u00f3 \u1edf local:\n<pre><code class=\"language-bash\">git branch\r\n<\/code><\/pre>\n<\/li>\n<li>T\u1ea1o m\u1ed9t nh\u00e1nh m\u1edbi c\u00f3 t\u00ean l\u00e0\u00a0<code>feature-login<\/code>:\n<pre><code class=\"language-bash\">git branch feature-login\r\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"git-switch\"><\/span>git switch<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>D\u00f9ng \u0111\u1ec3 chuy\u1ec3n \u0111\u1ed5i qua l\u1ea1i gi\u1eefa c\u00e1c nh\u00e1nh m\u1ed9t c\u00e1ch an to\u00e0n v\u00e0 r\u00f5 ngh\u0129a.<\/p>\n<pre><code class=\"language-bash\">git switch feature-login\r\n<\/code><\/pre>\n<p><em>B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 v\u1eeba t\u1ea1o nh\u00e1nh m\u1edbi v\u1eeba chuy\u1ec3n sang nh\u00e1nh \u0111\u00f3 ngay l\u1eadp t\u1ee9c b\u1eb1ng l\u1ec7nh:<\/em>\u00a0<code>git switch -c feature-register<\/code><\/p>\n<h3><span class=\"ez-toc-section\" id=\"git-checkout\"><\/span>git checkout<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0110\u00e2y l\u00e0 l\u1ec7nh truy\u1ec1n th\u1ed1ng tr\u01b0\u1edbc khi l\u1ec7nh\u00a0<code>git switch<\/code>\u00a0ra \u0111\u1eddi, tuy nhi\u00ean n\u00f3 v\u1eabn \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng r\u1ea5t nhi\u1ec1u:<\/p>\n<pre><code class=\"language-bash\">git checkout feature-login\r\n<\/code><\/pre>\n<ul>\n<li><strong>S\u1ef1 kh\u00e1c nhau gi\u1eefa git switch v\u00e0 git checkout:<\/strong>\u00a0L\u1ec7nh\u00a0<code>checkout<\/code>\u00a0l\u00e0 m\u1ed9t l\u1ec7nh \u0111a n\u0103ng, v\u1eeba d\u00f9ng \u0111\u1ec3 chuy\u1ec3n nh\u00e1nh, v\u1eeba d\u00f9ng \u0111\u1ec3 kh\u00f4i ph\u1ee5c c\u00e1c file c\u0169. \u0110i\u1ec1u n\u00e0y \u0111\u00f4i khi g\u00e2y b\u1ed1i r\u1ed1i cho ng\u01b0\u1eddi m\u1edbi. K\u1ec3 t\u1eeb c\u00e1c phi\u00ean b\u1ea3n Git g\u1ea7n \u0111\u00e2y, c\u1ed9ng \u0111\u1ed3ng khuy\u1ebfn kh\u00edch d\u00f9ng\u00a0<code>switch<\/code>\u00a0thu\u1ea7n t\u00fay cho vi\u1ec7c chuy\u1ec3n nh\u00e1nh v\u00e0\u00a0<code>restore<\/code>\u00a0\u0111\u1ec3 kh\u00f4i ph\u1ee5c file nh\u1eb1m ph\u00e2n t\u00e1ch r\u00f5 r\u00e0ng ch\u1ee9c n\u0103ng.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"git-merge-%E2%80%93-Hop-nhat-cac-nhanh\"><\/span>git merge \u2013 H\u1ee3p nh\u1ea5t c\u00e1c nh\u00e1nh<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Khi \u0111\u00e3 ho\u00e0n th\u00e0nh code tr\u00ean nh\u00e1nh ph\u1ee5 (v\u00ed d\u1ee5\u00a0<code>feature-login<\/code>), b\u1ea1n c\u1ea7n g\u1ed9p nh\u1eefng thay \u0111\u1ed5i \u0111\u00f3 v\u00e0o nh\u00e1nh ch\u00ednh (v\u00ed d\u1ee5\u00a0<code>main<\/code>). \u0110\u1ea7u ti\u00ean b\u1ea1n chuy\u1ec3n v\u1ec1 nh\u00e1nh\u00a0<code>main<\/code>, sau \u0111\u00f3 ch\u1ea1y l\u1ec7nh merge:<\/p>\n<pre><code class=\"language-bash\">git switch main\r\ngit merge feature-login\r\n<\/code><\/pre>\n<p>Trong th\u1ef1c t\u1ebf, vi\u1ec7c merge th\u01b0\u1eddng di\u1ec5n ra d\u01b0\u1edbi hai h\u00ecnh th\u1ee9c:<\/p>\n<ul>\n<li><strong>Fast-forward merge:<\/strong>\u00a0X\u1ea3y ra khi nh\u00e1nh ch\u00ednh kh\u00f4ng c\u00f3 th\u00eam commit m\u1edbi n\u00e0o k\u1ec3 t\u1eeb khi b\u1ea1n t\u00e1ch nh\u00e1nh ph\u1ee5. Git ch\u1ec9 \u0111\u01a1n gi\u1ea3n l\u00e0 &#8220;tua nhanh&#8221; con tr\u1ecf c\u1ee7a nh\u00e1nh ch\u00ednh \u0111\u1ebfn commit m\u1edbi nh\u1ea5t c\u1ee7a nh\u00e1nh ph\u1ee5.<\/li>\n<li><strong>Three-way merge:<\/strong>\u00a0X\u1ea3y ra khi c\u1ea3 nh\u00e1nh ch\u00ednh v\u00e0 nh\u00e1nh ph\u1ee5 \u0111\u1ec1u c\u00f3 nh\u1eefng commit m\u1edbi \u0111\u1ed9c l\u1eadp sau khi t\u00e1ch nh\u00e1nh. Git s\u1ebd t\u1ef1 \u0111\u1ed9ng t\u1ea1o m\u1ed9t commit h\u1ee3p nh\u1ea5t (merge commit) \u0111\u1ec3 g\u1eafn k\u1ebft l\u1ecbch s\u1eed c\u1ee7a c\u1ea3 hai nh\u00e1nh l\u1ea1i v\u1edbi nhau.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"git-branch-d-%E2%80%93-Xoa-branch\"><\/span>git branch -d \u2013 X\u00f3a branch<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Khi m\u1ed9t t\u00ednh n\u0103ng \u0111\u00e3 \u0111\u01b0\u1ee3c ki\u1ec3m tra v\u00e0 merge th\u00e0nh c\u00f4ng v\u00e0o nh\u00e1nh ch\u00ednh, b\u1ea1n n\u00ean x\u00f3a nh\u00e1nh ph\u1ee5 \u0111\u00f3 \u0111i \u0111\u1ec3 tr\u00e1nh l\u00e0m r\u1ed1i danh s\u00e1ch nh\u00e1nh:<\/p>\n<pre><code class=\"language-bash\">git branch -d feature-login\r\n<\/code><\/pre>\n<p><em>L\u01b0u \u00fd: N\u1ebfu nh\u00e1nh ph\u1ee5 ch\u01b0a \u0111\u01b0\u1ee3c merge nh\u01b0ng b\u1ea1n v\u1eabn mu\u1ed1n x\u00f3a b\u1ecf ho\u00e0n to\u00e0n, h\u00e3y d\u00f9ng l\u1ec7nh c\u01b0\u1ee1ng ch\u1ebf l\u00e0\u00a0<code>git branch -D feature-login<\/code>.<\/em><\/p>\n<hr \/>\n<h2><span class=\"ez-toc-section\" id=\"Lam-Viec-Voi-Remote-Repository\"><\/span>L\u00e0m Vi\u1ec7c V\u1edbi Remote Repository<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Remote-Repository-la-gi\"><\/span>Remote Repository l\u00e0 g\u00ec?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Remote Repository l\u00e0 kho l\u01b0u tr\u1eef \u0111\u01b0\u1ee3c host tr\u00ean <a href=\"https:\/\/interdata.vn\/blog\/mang-internet\/\">internet<\/a> ho\u1eb7c m\u1ea1ng n\u1ed9i b\u1ed9. N\u00f3 \u0111\u00f3ng vai tr\u00f2 l\u00e0 n\u01a1i trung chuy\u1ec3n code gi\u00fap c\u00e1c th\u00e0nh vi\u00ean trong d\u1ef1 \u00e1n d\u1ec5 d\u00e0ng chia s\u1ebb c\u00f4ng vi\u1ec7c v\u1edbi nhau.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"git-remote\"><\/span>git remote<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Xem danh s\u00e1ch c\u00e1c k\u1ebft n\u1ed1i remote hi\u1ec7n c\u00f3 trong d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n:<\/p>\n<pre><code class=\"language-bash\">git remote -v\r\n<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"git-remote-add\"><\/span>git remote add<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Li\u00ean k\u1ebft kho l\u01b0u tr\u1eef c\u1ee5c b\u1ed9 c\u1ee7a b\u1ea1n v\u1edbi m\u1ed9t kho l\u01b0u tr\u1eef tr\u1ef1c tuy\u1ebfn:<\/p>\n<pre><code class=\"language-bash\">git remote add origin https:\/\/github.com\/example\/project.git\r\n<\/code><\/pre>\n<p><em>(Trong \u0111\u00f3\u00a0<code>origin<\/code>\u00a0l\u00e0 t\u00ean m\u1eb7c \u0111\u1ecbnh th\u01b0\u1eddng d\u00f9ng \u0111\u1ec3 \u0111\u1ea1i di\u1ec7n cho m\u00e1y ch\u1ee7 remote ch\u00ednh).<\/em><\/p>\n<h3><span class=\"ez-toc-section\" id=\"git-push\"><\/span>git push<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0110\u1ea9y to\u00e0n b\u1ed9 commit m\u1edbi t\u1eeb m\u00e1y c\u1ee7a b\u1ea1n l\u00ean server tr\u1ef1c tuy\u1ebfn:<\/p>\n<pre><code class=\"language-bash\">git push origin main\r\n<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"git-pull\"><\/span>git pull<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>T\u1ea3i c\u00e1c thay \u0111\u1ed5i m\u1edbi nh\u1ea5t t\u1eeb server v\u1ec1 m\u00e1y c\u1ee5c b\u1ed9 v\u00e0 t\u1ef1 \u0111\u1ed9ng h\u1ee3p nh\u1ea5t (merge) ch\u00fang v\u00e0o nh\u00e1nh hi\u1ec7n t\u1ea1i c\u1ee7a b\u1ea1n:<\/p>\n<pre><code class=\"language-bash\">git pull origin main\r\n<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"git-fetch\"><\/span>git fetch<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ch\u1ec9 t\u1ea3i v\u1ec1 th\u00f4ng tin v\u00e0 c\u00e1c commit m\u1edbi t\u1eeb server nh\u01b0ng\u00a0<strong>kh\u00f4ng<\/strong>\u00a0t\u1ef1 \u0111\u1ed9ng merge v\u00e0o code hi\u1ec7n t\u1ea1i c\u1ee7a b\u1ea1n. B\u1ea1n c\u00f3 th\u1ec3 ki\u1ec3m tra c\u00e1c thay \u0111\u1ed5i n\u00e0y tr\u01b0\u1edbc khi quy\u1ebft \u0111\u1ecbnh g\u1ed9p ch\u00fang v\u00e0o.<\/p>\n<pre><code class=\"language-bash\">git fetch origin\r\n<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"So-sanh-git-pull-va-git-fetch\"><\/span>So s\u00e1nh git pull v\u00e0 git fetch<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<table>\n<thead>\n<tr>\n<th align=\"left\">L\u1ec7nh<\/th>\n<th align=\"center\">T\u1ea3i d\u1eef li\u1ec7u m\u1edbi t\u1eeb Remote<\/th>\n<th align=\"center\">T\u1ef1 \u0111\u1ed9ng h\u1ee3p nh\u1ea5t (Merge) v\u00e0o code hi\u1ec7n t\u1ea1i<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\"><strong>git fetch<\/strong><\/td>\n<td align=\"center\">C\u00f3<\/td>\n<td align=\"center\">Kh\u00f4ng<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>git pull<\/strong><\/td>\n<td align=\"center\">C\u00f3<\/td>\n<td align=\"center\">C\u00f3 (T\u01b0\u01a1ng \u0111\u01b0\u01a1ng v\u1edbi\u00a0<code>git fetch<\/code>\u00a0+\u00a0<code>git merge<\/code>)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h2><span class=\"ez-toc-section\" id=\"GitHub-GitLab-Va-Git-Server-Rieng\"><\/span>GitHub, GitLab V\u00e0 Git Server Ri\u00eang<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Khi l\u00e0m vi\u1ec7c v\u1edbi Git, b\u1ea1n s\u1ebd c\u1ea7n m\u1ed9t n\u01a1i \u0111\u1ec3 l\u01b0u tr\u1eef m\u00e3 ngu\u1ed3n tr\u1ef1c tuy\u1ebfn. Ba gi\u1ea3i ph\u00e1p ph\u1ed5 bi\u1ebfn nh\u1ea5t hi\u1ec7n nay bao g\u1ed3m:<\/p>\n<h3><span class=\"ez-toc-section\" id=\"GitHub-la-gi\"><\/span>GitHub l\u00e0 g\u00ec?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>GitHub l\u00e0 n\u1ec1n t\u1ea3ng l\u01b0u tr\u1eef m\u00e3 ngu\u1ed3n ch\u1ea1y tr\u00ean n\u1ec1n Git l\u1edbn nh\u1ea5t th\u1ebf gi\u1edbi, thu\u1ed9c s\u1edf h\u1eefu c\u1ee7a Microsoft. \u0110\u00e2y l\u00e0 \u0111i\u1ec3m h\u1eb9n l\u00fd t\u01b0\u1edfng cho c\u00e1c d\u1ef1 \u00e1n m\u00e3 ngu\u1ed3n m\u1edf v\u00e0 c\u1ed9ng \u0111\u1ed3ng l\u1eadp tr\u00ecnh vi\u00ean to\u00e0n c\u1ea7u nh\u1edd c\u00e1c t\u00ednh n\u0103ng t\u01b0\u01a1ng t\u00e1c x\u00e3 h\u1ed9i m\u1ea1nh m\u1ebd.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"GitLab-la-gi\"><\/span>GitLab l\u00e0 g\u00ec?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>GitLab l\u00e0 m\u1ed9t n\u1ec1n t\u1ea3ng qu\u1ea3n l\u00fd v\u00f2ng \u0111\u1eddi ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m to\u00e0n di\u1ec7n. Ngo\u00e0i vi\u1ec7c l\u01b0u tr\u1eef m\u00e3 ngu\u1ed3n, GitLab n\u1ed5i ti\u1ebfng v\u1edbi h\u1ec7 th\u1ed1ng CI\/CD c\u1ef1c k\u1ef3 m\u1ea1nh m\u1ebd t\u00edch h\u1ee3p s\u1eb5n, h\u1ed7 tr\u1ee3 c\u1ea3 hai h\u00ecnh th\u1ee9c s\u1eed d\u1ee5ng \u0111\u00e1m m\u00e2y (Cloud) v\u00e0 t\u1ef1 v\u1eadn h\u00e0nh (Self-hosted).<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Khi-nao-nen-dung-GitHub\"><\/span>Khi n\u00e0o n\u00ean d\u00f9ng GitHub?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>B\u1ea1n mu\u1ed1n ph\u00e1t tri\u1ec3n c\u00e1c d\u1ef1 \u00e1n m\u00e3 ngu\u1ed3n m\u1edf, chia s\u1ebb v\u1edbi c\u1ed9ng \u0111\u1ed3ng.<\/li>\n<li>D\u1ef1 \u00e1n c\u00e1 nh\u00e2n c\u1ea7n s\u1ef1 ti\u1ec7n l\u1ee3i, nhanh ch\u00f3ng, kh\u00f4ng mu\u1ed1n t\u1ed1n c\u00f4ng c\u1ea5u h\u00ecnh h\u1ea1 t\u1ea7ng.<\/li>\n<li>C\u1ea7n t\u1eadn d\u1ee5ng h\u1ec7 sinh th\u00e1i phong ph\u00fa t\u1eeb GitHub Actions v\u00e0 c\u1ed9ng \u0111\u1ed3ng l\u1eadp tr\u00ecnh vi\u00ean \u0111\u00f4ng \u0111\u1ea3o.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Khi-nao-nen-dung-GitLab\"><\/span>Khi n\u00e0o n\u00ean d\u00f9ng GitLab?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>D\u1ef1 \u00e1n doanh nghi\u1ec7p c\u1ea7n quy tr\u00ecnh CI\/CD t\u00edch h\u1ee3p ch\u1eb7t ch\u1ebd t\u1eeb kh\u00e2u l\u1eadp tr\u00ecnh \u0111\u1ebfn kh\u00e2u deploy.<\/li>\n<li>C\u1ea7n qu\u1ea3n l\u00fd d\u1ef1 \u00e1n chi ti\u1ebft v\u1edbi c\u00e1c c\u00f4ng c\u1ee5 Issue Tracker, Wiki chuy\u00ean s\u00e2u.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Khi-nao-nen-Self-host-Git-Server\"><\/span>Khi n\u00e0o n\u00ean Self-host Git Server?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Vi\u1ec7c t\u1ef1 tri\u1ec3n khai m\u1ed9t m\u00e1y ch\u1ee7 Git ri\u00eang (S\u1eed d\u1ee5ng GitLab Self-managed, Gitea ho\u1eb7c Forgejo) l\u00e0 l\u1ef1a ch\u1ecdn t\u1ed1i \u01b0u khi:<\/p>\n<ul>\n<li><strong>Y\u00eau c\u1ea7u b\u1ea3o m\u1eadt cao:<\/strong>\u00a0M\u00e3 ngu\u1ed3n l\u00e0 t\u00e0i s\u1ea3n tr\u00ed tu\u1ec7 c\u1ed1t l\u00f5i, kh\u00f4ng mu\u1ed1n l\u01b0u tr\u1eef tr\u00ean server c\u1ee7a b\u00ean th\u1ee9 ba.<\/li>\n<li><strong>Tu\u00e2n th\u1ee7 quy \u0111\u1ecbnh d\u1eef li\u1ec7u (Compliance):<\/strong>\u00a0C\u00e1c quy \u0111\u1ecbnh kh\u1eaft khe c\u1ee7a ng\u00e0nh t\u00e0i ch\u00ednh, y t\u1ebf ho\u1eb7c ch\u00ednh ph\u1ee7 y\u00eau c\u1ea7u d\u1eef li\u1ec7u ph\u1ea3i n\u1eb1m trong n\u01b0\u1edbc ho\u1eb7c h\u1ea1 t\u1ea7ng ri\u00eang bi\u1ec7t.<\/li>\n<li><strong>T\u1ed1i \u01b0u h\u00f3a chi ph\u00ed:<\/strong>\u00a0Khi quy m\u00f4 \u0111\u1ed9i ng\u0169 ph\u00e1t tri\u1ec3n t\u0103ng l\u00ean, chi ph\u00ed b\u1ea3n quy\u1ec1n license cho m\u1ed7i user tr\u00ean Cloud c\u00f3 th\u1ec3 r\u1ea5t l\u1edbn. T\u1ef1 host tr\u00ean VPS ri\u00eang gi\u00fap b\u1ea1n ch\u1ee7 \u0111\u1ed9ng ki\u1ec3m so\u00e1t chi ph\u00ed d\u1ef1a tr\u00ean ph\u1ea7n c\u1ee9ng s\u1eed d\u1ee5ng.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Bang-so-sanh-cac-giai-phap-luu-tru-Git\"><\/span>B\u1ea3ng so s\u00e1nh c\u00e1c gi\u1ea3i ph\u00e1p l\u01b0u tr\u1eef Git<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<table>\n<thead>\n<tr>\n<th align=\"left\">Ti\u00eau ch\u00ed<\/th>\n<th align=\"left\">GitHub<\/th>\n<th align=\"left\">GitLab (Cloud)<\/th>\n<th align=\"left\">Self-host Git (GitLab, Gitea)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\"><strong>Qu\u1ea3n l\u00fd h\u1ec7 th\u1ed1ng<\/strong><\/td>\n<td align=\"left\">Do Microsoft qu\u1ea3n l\u00fd<\/td>\n<td align=\"left\">Do GitLab qu\u1ea3n l\u00fd<\/td>\n<td align=\"left\">T\u1ef1 qu\u1ea3n l\u00fd v\u00e0 v\u1eadn h\u00e0nh<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Chi ph\u00ed<\/strong><\/td>\n<td align=\"left\">Mi\u1ec5n ph\u00ed\/Tr\u1ea3 ph\u00ed theo user<\/td>\n<td align=\"left\">Mi\u1ec5n ph\u00ed\/Tr\u1ea3 ph\u00ed theo user<\/td>\n<td align=\"left\">Ph\u1ee5 thu\u1ed9c v\u00e0o chi ph\u00ed thu\u00ea h\u1ea1 t\u1ea7ng VPS\/Server<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Ki\u1ec3m so\u00e1t d\u1eef li\u1ec7u<\/strong><\/td>\n<td align=\"left\">Trung b\u00ecnh<\/td>\n<td align=\"left\">Trung b\u00ecnh<\/td>\n<td align=\"left\">Cao nh\u1ea5t (To\u00e0n quy\u1ec1n ki\u1ec3m so\u00e1t)<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Ph\u00f9 h\u1ee3p v\u1edbi<\/strong><\/td>\n<td align=\"left\">C\u00e1 nh\u00e2n, M\u00e3 ngu\u1ed3n m\u1edf<\/td>\n<td align=\"left\">\u0110\u1ed9i ng\u0169 c\u1ea7n CI\/CD t\u00edch h\u1ee3p<\/td>\n<td align=\"left\">Doanh nghi\u1ec7p \u01b0u ti\u00ean b\u1ea3o m\u1eadt v\u00e0 t\u1ef1 ch\u1ee7 h\u1ea1 t\u1ea7ng<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<div style=\"border-left: 4px solid #0A4FF6; padding: 16px 20px; margin: 24px 0; background: #F5F8FF; border-radius: 8px; color: #0a1a3a;\">Nhi\u1ec1u \u0111\u1ed9i ng\u0169 ph\u00e1t tri\u1ec3n l\u1ef1a ch\u1ecdn tri\u1ec3n khai GitLab Self-Managed ho\u1eb7c Gitea tr\u00ean VPS ri\u00eang \u0111\u1ec3 ki\u1ec3m so\u00e1t m\u00e3 ngu\u1ed3n, runner CI\/CD, backup v\u00e0 quy\u1ec1n truy c\u1eadp n\u1ed9i b\u1ed9. <strong><a href=\"https:\/\/interdata.vn\/\" target=\"_blank\" rel=\"noopener\">InterData<\/a> cung c\u1ea5p VPS s\u1eed d\u1ee5ng CPU \u0111\u1eddi m\u1edbi, SSD NVMe U.2, <a href=\"https:\/\/interdata.vn\/blog\/bang-thong-la-gi\/\">b\u0103ng th\u00f4ng<\/a> l\u1edbn v\u00e0 chi ph\u00ed h\u1ee3p l\u00fd, ph\u00f9 h\u1ee3p \u0111\u1ec3 v\u1eadn h\u00e0nh Git Server, <a href=\"https:\/\/interdata.vn\/blog\/docker-la-gi\/\">Docker<\/a> Registry, CI\/CD Pipeline ho\u1eb7c m\u00f4i tr\u01b0\u1eddng staging cho d\u1ef1 \u00e1n ph\u1ea7n m\u1ec1m.<\/strong><\/div>\n<hr \/>\n<h2><span class=\"ez-toc-section\" id=\"Hoan-Tac-Va-Khoi-Phuc-Thay-Doi-Trong-Git\"><\/span>Ho\u00e0n T\u00e1c V\u00e0 Kh\u00f4i Ph\u1ee5c Thay \u0110\u1ed5i Trong Git<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Trong qu\u00e1 tr\u00ecnh l\u00e0m vi\u1ec7c, vi\u1ec7c code l\u1ed7i ho\u1eb7c mu\u1ed1n quay l\u1ea1i m\u1ed9t tr\u1ea1ng th\u00e1i tr\u01b0\u1edbc \u0111\u00f3 l\u00e0 \u0111i\u1ec1u h\u1ebft s\u1ee9c b\u00ecnh th\u01b0\u1eddng. Git cung c\u1ea5p c\u00e1c c\u00f4ng c\u1ee5 m\u1ea1nh m\u1ebd \u0111\u1ec3 b\u1ea1n s\u1eeda sai.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"git-restore\"><\/span>git restore<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>D\u00f9ng \u0111\u1ec3 h\u1ee7y b\u1ecf nh\u1eefng thay \u0111\u1ed5i ch\u01b0a commit trong th\u01b0 m\u1ee5c l\u00e0m vi\u1ec7c c\u1ee7a b\u1ea1n, \u0111\u01b0a file v\u1ec1 tr\u1ea1ng th\u00e1i \u1edf commit g\u1ea7n nh\u1ea5t.<\/p>\n<pre><code class=\"language-bash\">git restore index.html\r\n<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"git-reset\"><\/span>git reset<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>L\u1ec7nh n\u00e0y d\u00f9ng \u0111\u1ec3 di chuy\u1ec3n con tr\u1ecf HEAD (v\u1ecb tr\u00ed hi\u1ec7n t\u1ea1i c\u1ee7a b\u1ea1n trong l\u1ecbch s\u1eed commit) v\u1ec1 m\u1ed9t commit c\u1ee5 th\u1ec3 trong qu\u00e1 kh\u1ee9. L\u1ec7nh n\u00e0y c\u00f3 3 ch\u1ebf \u0111\u1ed9 ho\u1ea1t \u0111\u1ed9ng ch\u00ednh:<\/p>\n<ul>\n<li><strong><code>--soft<\/code>:<\/strong>\u00a0Gi\u1eef nguy\u00ean c\u00e1c thay \u0111\u1ed5i c\u1ee7a b\u1ea1n trong th\u01b0 m\u1ee5c l\u00e0m vi\u1ec7c v\u00e0 khu v\u1ef1c ch\u1edd (Staging Area). B\u1ea1n ch\u1ec9 h\u1ee7y b\u1ecf h\u00e0nh \u0111\u1ed9ng commit.\n<pre><code class=\"language-bash\">git reset --soft HEAD~1\r\n<\/code><\/pre>\n<p><em>(Quay l\u1ea1i tr\u01b0\u1edbc th\u1eddi \u0111i\u1ec3m commit 1 b\u01b0\u1edbc)<\/em><\/li>\n<li><strong><code>--mixed<\/code>\u00a0(m\u1eb7c \u0111\u1ecbnh):<\/strong>\u00a0Gi\u1eef l\u1ea1i c\u00e1c thay \u0111\u1ed5i trong th\u01b0 m\u1ee5c l\u00e0m vi\u1ec7c nh\u01b0ng lo\u1ea1i b\u1ecf ch\u00fang kh\u1ecfi Staging Area.\n<pre><code class=\"language-bash\">git reset HEAD index.html\r\n<\/code><\/pre>\n<\/li>\n<li><strong><code>--hard<\/code>:<\/strong>\u00a0X\u00f3a s\u1ea1ch m\u1ecdi thay \u0111\u1ed5i k\u1ec3 t\u1eeb commit \u0111\u00f3 \u1edf c\u1ea3 th\u01b0 m\u1ee5c l\u00e0m vi\u1ec7c v\u00e0 khu v\u1ef1c ch\u1edd. H\u00e3y c\u1ef1c k\u1ef3 c\u1ea9n th\u1eadn khi s\u1eed d\u1ee5ng t\u00f9y ch\u1ecdn n\u00e0y v\u00ec b\u1ea1n c\u00f3 th\u1ec3 m\u1ea5t v\u0129nh vi\u1ec5n nh\u1eefng g\u00ec ch\u01b0a commit.\n<pre><code class=\"language-bash\">git reset --hard HEAD~1\r\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"git-revert\"><\/span>git revert<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Kh\u00e1c v\u1edbi\u00a0<code>reset<\/code>\u00a0(x\u00f3a b\u1ecf l\u1ecbch s\u1eed),\u00a0<code>revert<\/code>\u00a0t\u1ea1o ra m\u1ed9t commit m\u1edbi ch\u1ee9a n\u1ed9i dung ng\u01b0\u1ee3c l\u1ea1i ho\u00e0n to\u00e0n v\u1edbi commit m\u00e0 b\u1ea1n mu\u1ed1n h\u1ee7y b\u1ecf. \u0110i\u1ec1u n\u00e0y gi\u00fap l\u1ecbch s\u1eed commit c\u1ee7a b\u1ea1n lu\u00f4n an to\u00e0n v\u00e0 kh\u00f4ng b\u1ecb \u0111\u1ee9t g\u00e3y.<\/p>\n<pre><code class=\"language-bash\">git revert &lt;commit-id&gt;\r\n<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Nen-dung-reset-hay-revert\"><\/span>N\u00ean d\u00f9ng reset hay revert?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<table>\n<thead>\n<tr>\n<th align=\"left\">Ti\u00eau ch\u00ed<\/th>\n<th align=\"left\">git reset<\/th>\n<th align=\"left\">git revert<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\"><strong>B\u1ea3n ch\u1ea5t<\/strong><\/td>\n<td align=\"left\">Quay lui d\u00f2ng th\u1eddi gian, lo\u1ea1i b\u1ecf c\u00e1c commit sau m\u1ed1c \u0111\u00f3.<\/td>\n<td align=\"left\">T\u1ea1o ra m\u1ed9t commit m\u1edbi \u0111\u1ec3 \u0111\u1ea3o ng\u01b0\u1ee3c thay \u0111\u1ed5i.<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>An to\u00e0n<\/strong><\/td>\n<td align=\"left\">Nguy hi\u1ec3m n\u1ebfu commit \u0111\u00f3 \u0111\u00e3 \u0111\u01b0\u1ee3c push l\u00ean remote chung.<\/td>\n<td align=\"left\">An to\u00e0n, kh\u00f4ng l\u00e0m \u1ea3nh h\u01b0\u1edfng \u0111\u1ebfn l\u1ecbch s\u1eed c\u1ee7a ng\u01b0\u1eddi kh\u00e1c.<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Khuy\u00ean d\u00f9ng<\/strong><\/td>\n<td align=\"left\">Ch\u1ec9 d\u00f9ng cho c\u00e1c commit c\u1ee5c b\u1ed9 (Local) ch\u01b0a push.<\/td>\n<td align=\"left\">D\u00f9ng cho c\u00e1c commit \u0111\u00e3 push l\u00ean Remote d\u00f9ng chung.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h2><span class=\"ez-toc-section\" id=\"Cac-Loi-Git-Thuong-Gap-Va-Cach-Khac-Phuc\"><\/span>C\u00e1c L\u1ed7i Git Th\u01b0\u1eddng G\u1eb7p V\u00e0 C\u00e1ch Kh\u1eafc Ph\u1ee5c<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Merge-Conflict-Xung-dot-khi-merge\"><\/span>Merge Conflict (Xung \u0111\u1ed9t khi merge)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><strong>Nguy\u00ean nh\u00e2n:<\/strong>\u00a0X\u1ea3y ra khi hai nh\u00e1nh kh\u00e1c nhau c\u00f9ng ch\u1ec9nh s\u1eeda m\u1ed9t d\u00f2ng code trong c\u00f9ng m\u1ed9t file, khi\u1ebfn Git kh\u00f4ng bi\u1ebft n\u00ean gi\u1eef l\u1ea1i phi\u00ean b\u1ea3n n\u00e0o khi merge.<\/li>\n<li><strong>C\u00e1ch kh\u1eafc ph\u1ee5c:<\/strong>\n<ol>\n<li>Ch\u1ea1y l\u1ec7nh\u00a0<code>git status<\/code>\u00a0\u0111\u1ec3 t\u00ecm c\u00e1c file b\u1ecb xung \u0111\u1ed9t.<\/li>\n<li>M\u1edf file \u0111\u00f3 b\u1eb1ng Code Editor, t\u00ecm c\u00e1c ph\u1ea7n \u0111\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u b\u1eb1ng k\u00fd hi\u1ec7u\u00a0<code>&lt;&lt;&lt;&lt;&lt;&lt;&lt;<\/code>,\u00a0<code>=======<\/code>,\u00a0<code>&gt;&gt;&gt;&gt;&gt;&gt;&gt;<\/code>.<\/li>\n<li>Th\u1ea3o lu\u1eadn v\u1edbi \u0111\u1ed3ng nghi\u1ec7p ho\u1eb7c t\u1ef1 ch\u1ecdn ph\u1ea7n code \u0111\u00fang, x\u00f3a c\u00e1c k\u00fd hi\u1ec7u \u0111\u00e1nh d\u1ea5u \u0111i.<\/li>\n<li>L\u01b0u file, ch\u1ea1y\u00a0<code>git add &lt;file&gt;<\/code>\u00a0v\u00e0 th\u1ef1c hi\u1ec7n\u00a0<code>git commit<\/code>\u00a0\u0111\u1ec3 ho\u00e0n t\u1ea5t qu\u00e1 tr\u00ecnh merge.<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Detached-HEAD\"><\/span>Detached HEAD<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><strong>Nguy\u00ean nh\u00e2n:<\/strong>\u00a0B\u1ea1n chuy\u1ec3n sang xem code \u1edf m\u1ed9t commit c\u1ee5 th\u1ec3 (b\u1eb1ng\u00a0<code>git checkout &lt;commit-id&gt;<\/code>) thay v\u00ec xem \u1edf m\u1ed9t nh\u00e1nh c\u1ee5 th\u1ec3. L\u00fac n\u00e0y m\u1ecdi commit m\u1edbi b\u1ea1n t\u1ea1o ra s\u1ebd kh\u00f4ng thu\u1ed9c v\u1ec1 nh\u00e1nh n\u00e0o v\u00e0 d\u1ec5 b\u1ecb m\u1ea5t.<\/li>\n<li><strong>C\u00e1ch kh\u1eafc ph\u1ee5c:<\/strong>\u00a0H\u00e3y nhanh ch\u00f3ng chuy\u1ec3n v\u1ec1 nh\u00e1nh l\u00e0m vi\u1ec7c an to\u00e0n b\u1eb1ng l\u1ec7nh:\n<pre><code class=\"language-bash\">git switch main\r\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Rejected-Push-Bi-tu-choi-day-code\"><\/span>Rejected Push (B\u1ecb t\u1eeb ch\u1ed1i \u0111\u1ea9y code)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><strong>L\u1ed7i th\u01b0\u1eddng g\u1eb7p:<\/strong>\u00a0<code>failed to push some refs to...<\/code><\/li>\n<li><strong>Nguy\u00ean nh\u00e2n:<\/strong>\u00a0Remote repository \u0111ang ch\u1ee9a nh\u1eefng commit m\u1edbi h\u01a1n so v\u1edbi m\u00e1y c\u1ee5c b\u1ed9 c\u1ee7a b\u1ea1n (do \u0111\u1ed3ng nghi\u1ec7p v\u1eeba \u0111\u1ea9y l\u00ean).<\/li>\n<li><strong>C\u00e1ch kh\u1eafc ph\u1ee5c:<\/strong>\u00a0B\u1ea1n c\u1ea7n k\u00e9o c\u00e1c thay \u0111\u1ed5i m\u1edbi nh\u1ea5t v\u1ec1 m\u00e1y c\u1ee7a m\u00ecnh tr\u01b0\u1edbc, gi\u1ea3i quy\u1ebft conflict (n\u1ebfu c\u00f3) r\u1ed3i m\u1edbi push l\u1ea1i:\n<pre><code class=\"language-bash\">git pull origin &lt;branch-name&gt;\r\n# Sau khi x\u1eed l\u00fd xong c\u00e1c thay \u0111\u1ed5i\r\ngit push origin &lt;branch-name&gt;\r\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Authentication-Failed-Loi-xac-thuc\"><\/span>Authentication Failed (L\u1ed7i x\u00e1c th\u1ef1c)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><strong>Nguy\u00ean nh\u00e2n:<\/strong>\u00a0K\u1ec3 t\u1eeb n\u0103m 2021, GitHub v\u00e0 nhi\u1ec1u n\u1ec1n t\u1ea3ng \u0111\u00e3 lo\u1ea1i b\u1ecf vi\u1ec7c x\u00e1c th\u1ef1c b\u1eb1ng m\u1eadt kh\u1ea9u t\u00e0i kho\u1ea3n th\u00f4ng th\u01b0\u1eddng khi d\u00f9ng d\u00f2ng l\u1ec7nh.<\/li>\n<li><strong>C\u00e1ch kh\u1eafc ph\u1ee5c:<\/strong>\u00a0B\u1ea1n c\u1ea7n t\u1ea1o\u00a0<strong>Personal Access Token (PAT)<\/strong>\u00a0trong ph\u1ea7n c\u00e0i \u0111\u1eb7t t\u00e0i kho\u1ea3n c\u1ee7a GitHub\/GitLab v\u00e0 d\u00f9ng token \u0111\u00f3 thay cho m\u1eadt kh\u1ea9u, ho\u1eb7c chuy\u1ec3n sang c\u1ea5u h\u00ecnh x\u00e1c th\u1ef1c an to\u00e0n b\u1eb1ng\u00a0<strong><a href=\"https:\/\/interdata.vn\/blog\/ssh-key-la-gi\/\">SSH Key<\/a><\/strong>.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Branch-Khong-Dong-Bo\"><\/span>Branch Kh\u00f4ng \u0110\u1ed3ng B\u1ed9<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><strong>Nguy\u00ean nh\u00e2n:<\/strong>\u00a0Danh s\u00e1ch nh\u00e1nh \u1edf m\u00e1y c\u1ee7a b\u1ea1n hi\u1ec3n th\u1ecb nh\u1eefng nh\u00e1nh \u0111\u00e3 b\u1ecb x\u00f3a tr\u00ean Remote Server.<\/li>\n<li><strong>C\u00e1ch kh\u1eafc ph\u1ee5c:<\/strong>\u00a0\u0110\u1ed3ng b\u1ed9 l\u1ea1i danh s\u00e1ch nh\u00e1nh b\u1eb1ng c\u00e1ch d\u1ecdn d\u1eb9p c\u00e1c nh\u00e1nh &#8220;r\u00e1c&#8221; kh\u00f4ng c\u00f2n t\u1ed3n t\u1ea1i tr\u00ean server:\n<pre><code class=\"language-bash\">git fetch --prune\r\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Xoa-nham-commit\"><\/span>X\u00f3a nh\u1ea7m commit<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><strong>Nguy\u00ean nh\u00e2n:<\/strong>\u00a0L\u1ee1 tay d\u00f9ng l\u1ec7nh\u00a0<code>git reset --hard<\/code>\u00a0khi\u1ebfn commit bi\u1ebfn m\u1ea5t kh\u1ecfi l\u1ecbch s\u1eed hi\u1ec3n th\u1ecb c\u1ee7a\u00a0<code>git log<\/code>.<\/li>\n<li><strong>C\u00e1ch kh\u1eafc ph\u1ee5c:<\/strong>\u00a0\u0110\u1eebng qu\u00e1 lo l\u1eafng, Git c\u00f3 m\u1ed9t nh\u1eadt k\u00fd l\u01b0u l\u1ea1i m\u1ecdi h\u00e0nh \u0111\u1ed9ng c\u1ee7a b\u1ea1n mang t\u00ean\u00a0<code>reflog<\/code>. H\u00e3y ch\u1ea1y:\n<pre><code class=\"language-bash\">git reflog\r\n<\/code><\/pre>\n<p>T\u00ecm m\u00e3 \u0111\u1ecbnh danh\u00a0<code>&lt;commit-id&gt;<\/code>\u00a0c\u1ee7a commit b\u1ecb m\u1ea5t trong danh s\u00e1ch hi\u1ec3n th\u1ecb, sau \u0111\u00f3 kh\u00f4i ph\u1ee5c l\u1ea1i b\u1eb1ng l\u1ec7nh:<\/p>\n<pre><code class=\"language-bash\">git reset --hard &lt;commit-id&gt;\r\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<hr \/>\n<h2><span class=\"ez-toc-section\" id=\"Git-Cheat-Sheet-%E2%80%93-Tong-Hop-Cac-Lenh-Git-Thiet-Yeu\"><\/span>Git Cheat Sheet \u2013 T\u1ed5ng H\u1ee3p C\u00e1c L\u1ec7nh Git Thi\u1ebft Y\u1ebfu<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0110\u1ec3 ti\u1ec7n tra c\u1ee9u nhanh trong qu\u00e1 tr\u00ecnh l\u00e0m vi\u1ec7c, d\u01b0\u1edbi \u0111\u00e2y l\u00e0 b\u1ea3ng t\u1ed5ng h\u1ee3p c\u00e1c nh\u00f3m l\u1ec7nh Git ph\u1ed5 bi\u1ebfn nh\u1ea5t.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Bang-1-Lenh-Git-thiet-yeu\"><\/span>B\u1ea3ng 1: L\u1ec7nh Git thi\u1ebft y\u1ebfu<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<table>\n<thead>\n<tr>\n<th align=\"left\">M\u1ee5c \u0111\u00edch<\/th>\n<th align=\"left\">L\u1ec7nh s\u1eed d\u1ee5ng<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\">Kh\u1edfi t\u1ea1o m\u1ed9t kho l\u01b0u tr\u1eef c\u1ee5c b\u1ed9<\/td>\n<td align=\"left\"><code>git init<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Sao ch\u00e9p d\u1ef1 \u00e1n t\u1eeb xa v\u1ec1 m\u00e1y<\/td>\n<td align=\"left\"><code>git clone &lt;url&gt;<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Ki\u1ec3m tra tr\u1ea1ng th\u00e1i c\u00e1c file<\/td>\n<td align=\"left\"><code>git status<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\u0110\u01b0a file v\u00e0o khu v\u1ef1c ch\u1edd<\/td>\n<td align=\"left\"><code>git add &lt;file&gt;<\/code>\u00a0ho\u1eb7c\u00a0<code>git add .<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\">L\u01b0u phi\u00ean b\u1ea3n m\u1edbi k\u00e8m th\u00f4ng \u0111i\u1ec7p<\/td>\n<td align=\"left\"><code>git commit -m \"Th\u00f4ng \u0111i\u1ec7p\"<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\u0110\u1ea9y code l\u00ean m\u00e1y ch\u1ee7 t\u1eeb xa<\/td>\n<td align=\"left\"><code>git push origin &lt;branch&gt;<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\">T\u1ea3i code m\u1edbi v\u1ec1 m\u00e1y v\u00e0 t\u1ef1 \u0111\u1ed9ng g\u1ed9p<\/td>\n<td align=\"left\"><code>git pull origin &lt;branch&gt;<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><span class=\"ez-toc-section\" id=\"Bang-2-Lenh-quan-ly-nhanh-Branch\"><\/span>B\u1ea3ng 2: L\u1ec7nh qu\u1ea3n l\u00fd nh\u00e1nh (Branch)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<table>\n<thead>\n<tr>\n<th align=\"left\">M\u1ee5c \u0111\u00edch<\/th>\n<th align=\"left\">L\u1ec7nh s\u1eed d\u1ee5ng<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\">Xem danh s\u00e1ch nh\u00e1nh hi\u1ec7n c\u00f3<\/td>\n<td align=\"left\"><code>git branch<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\">T\u1ea1o m\u1ed9t nh\u00e1nh m\u1edbi<\/td>\n<td align=\"left\"><code>git branch &lt;ten-nhanh&gt;<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Chuy\u1ec3n sang nh\u00e1nh kh\u00e1c<\/td>\n<td align=\"left\"><code>git switch &lt;ten-nhanh&gt;<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\">V\u1eeba t\u1ea1o v\u1eeba chuy\u1ec3n sang nh\u00e1nh m\u1edbi<\/td>\n<td align=\"left\"><code>git switch -c &lt;ten-nhanh&gt;<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\">H\u1ee3p nh\u1ea5t nh\u00e1nh ph\u1ee5 v\u00e0o nh\u00e1nh hi\u1ec7n t\u1ea1i<\/td>\n<td align=\"left\"><code>git merge &lt;ten-nhanh-phu&gt;<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\">X\u00f3a m\u1ed9t nh\u00e1nh an to\u00e0n<\/td>\n<td align=\"left\"><code>git branch -d &lt;ten-nhanh&gt;<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><span class=\"ez-toc-section\" id=\"Bang-3-Hoan-tac-va-khoi-phuc-Undo\"><\/span>B\u1ea3ng 3: Ho\u00e0n t\u00e1c v\u00e0 kh\u00f4i ph\u1ee5c (Undo)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<table>\n<thead>\n<tr>\n<th align=\"left\">M\u1ee5c \u0111\u00edch<\/th>\n<th align=\"left\">L\u1ec7nh s\u1eed d\u1ee5ng<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\">H\u1ee7y b\u1ecf c\u00e1c thay \u0111\u1ed5i ch\u01b0a commit c\u1ee7a file<\/td>\n<td align=\"left\"><code>git restore &lt;file&gt;<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\u0110\u01b0a file ra kh\u1ecfi khu v\u1ef1c ch\u1edd (Staging)<\/td>\n<td align=\"left\"><code>git reset HEAD &lt;file&gt;<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\">H\u1ee7y commit, gi\u1eef l\u1ea1i code trong Working Directory<\/td>\n<td align=\"left\"><code>git reset --soft HEAD~1<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\">H\u1ee7y b\u1ecf ho\u00e0n to\u00e0n commit v\u00e0 code m\u1edbi nh\u1ea5t<\/td>\n<td align=\"left\"><code>git reset --hard HEAD~1<\/code><\/td>\n<\/tr>\n<tr>\n<td align=\"left\">T\u1ea1o commit \u0111\u1ea3o ng\u01b0\u1ee3c thay \u0111\u1ed5i c\u1ee7a commit c\u0169<\/td>\n<td align=\"left\"><code>git revert &lt;commit-id&gt;<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h2><span class=\"ez-toc-section\" id=\"Kinh-Nghiem-Su-Dung-Git-Hieu-Qua\"><\/span>Kinh Nghi\u1ec7m S\u1eed D\u1ee5ng Git Hi\u1ec7u Qu\u1ea3<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Vi\u1ec7c s\u1eed d\u1ee5ng Git \u0111\u00fang c\u00e1ch s\u1ebd gi\u00fap b\u1ea1n gi\u1eef cho l\u1ecbch s\u1eed d\u1ef1 \u00e1n lu\u00f4n s\u1ea1ch s\u1ebd, d\u1ec5 theo d\u00f5i v\u00e0 h\u1ea1n ch\u1ebf t\u1ed1i \u0111a c\u00e1c l\u1ed7i xung \u0111\u1ed9t m\u00e3 ngu\u1ed3n khi l\u00e0m vi\u1ec7c nh\u00f3m.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Commit-thuong-xuyen\"><\/span>Commit th\u01b0\u1eddng xuy\u00ean<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>N\u00ean th\u1ef1c hi\u1ec7n commit th\u01b0\u1eddng xuy\u00ean sau khi ho\u00e0n th\u00e0nh t\u1eebng ph\u1ea7n vi\u1ec7c nh\u1ecf, c\u00f3 t\u00ednh \u0111\u1ed9c l\u1eadp. Tr\u00e1nh vi\u1ec7c code li\u00ean t\u1ee5c c\u1ea3 ng\u00e0y v\u1edbi h\u00e0ng ngh\u00ecn d\u00f2ng r\u1ed3i m\u1edbi commit m\u1ed9t l\u1ea7n, \u0111i\u1ec1u n\u00e0y khi\u1ebfn vi\u1ec7c t\u00ecm v\u00e0 s\u1eeda l\u1ed7i tr\u1edf n\u00ean c\u1ef1c k\u1ef3 ph\u1ee9c t\u1ea1p n\u1ebfu c\u00f3 s\u1ef1 c\u1ed1.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Viet-commit-message-ro-rang\"><\/span>Vi\u1ebft commit message r\u00f5 r\u00e0ng<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u00c1p d\u1ee5ng c\u00e1c ti\u00eau chu\u1ea9n vi\u1ebft commit message gi\u00fap \u0111\u1ed9i ng\u0169 c\u1ee7a b\u1ea1n d\u1ec5 d\u00e0ng \u0111\u1ecdc hi\u1ec3u l\u1ecbch s\u1eed d\u1ef1 \u00e1n. Hai ti\u00eau chu\u1ea9n ph\u1ed5 bi\u1ebfn nh\u1ea5t l\u00e0:<\/p>\n<ul>\n<li><strong>Conventional Commits:<\/strong>\u00a0\u0110\u1ecbnh d\u1ea1ng c\u1ea5u tr\u00fac r\u00f5 r\u00e0ng nh\u01b0\u00a0<code>type(scope): description<\/code>\u00a0(v\u00ed d\u1ee5:\u00a0<code>feat(auth): add login validation<\/code>).<\/li>\n<li><strong>Semantic Commits:<\/strong>\u00a0Gi\u00fap ph\u00e2n lo\u1ea1i r\u00f5 m\u1ee5c \u0111\u00edch c\u1ee7a commit:\n<ul>\n<li><code>feat<\/code>: T\u00ednh n\u0103ng m\u1edbi.<\/li>\n<li><code>fix<\/code>: S\u1eeda l\u1ed7i.<\/li>\n<li><code>docs<\/code>: Thay \u0111\u1ed5i t\u00e0i li\u1ec7u h\u01b0\u1edbng d\u1eabn.<\/li>\n<li><code>style<\/code>: \u0110\u1ecbnh d\u1ea1ng code (kho\u1ea3ng tr\u1eafng, d\u1ea5u ch\u1ea5m ph\u1ea9y, kh\u00f4ng \u1ea3nh h\u01b0\u1edfng logic).<\/li>\n<li><code>refactor<\/code>: T\u1ed1i \u01b0u h\u00f3a c\u1ea5u tr\u00fac code nh\u01b0ng kh\u00f4ng thay \u0111\u1ed5i t\u00ednh n\u0103ng.<\/li>\n<li><code>test<\/code>: Vi\u1ebft th\u00eam b\u1ed9 ki\u1ec3m th\u1eed.<\/li>\n<li><code>chore<\/code>: C\u00e1c t\u00e1c v\u1ee5 v\u1ee5n v\u1eb7t kh\u00e1c (update th\u01b0 vi\u1ec7n, c\u1ea5u h\u00ecnh build&#8230;).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Khong-commit-file-nhay-cam\"><\/span>Kh\u00f4ng commit file nh\u1ea1y c\u1ea3m<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Tuy\u1ec7t \u0111\u1ed1i kh\u00f4ng \u0111\u1ea9y c\u00e1c th\u00f4ng tin b\u1ea3o m\u1eadt l\u00ean c\u00e1c kho ch\u1ee9a chung. C\u00e1c t\u1ec7p tin c\u1ea7n tr\u00e1nh bao g\u1ed3m:<\/p>\n<ul>\n<li>C\u00e1c file c\u1ea5u h\u00ecnh m\u00f4i tr\u01b0\u1eddng ch\u1ee9a m\u1eadt kh\u1ea9u, API key (<code>.env<\/code>).<\/li>\n<li>Kh\u00f3a b\u1ea3o m\u1eadt c\u00e1 nh\u00e2n (<code>id_rsa<\/code>,\u00a0<code>*.pem<\/code>).<\/li>\n<li>C\u00e1c th\u01b0 m\u1ee5c ch\u1ee9a th\u01b0 vi\u1ec7n t\u1ea3i v\u1ec1 (nh\u01b0\u00a0<code>node_modules<\/code>\u00a0hay\u00a0<code>vendor<\/code>).<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Su-dung-gitignore-dung-cach\"><\/span>S\u1eed d\u1ee5ng .gitignore \u0111\u00fang c\u00e1ch<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>H\u00e3y t\u1ea1o m\u1ed9t file c\u00f3 t\u00ean ch\u00ednh x\u00e1c l\u00e0\u00a0<code>.gitignore<\/code>\u00a0\u1edf th\u01b0 m\u1ee5c g\u1ed1c c\u1ee7a d\u1ef1 \u00e1n. File n\u00e0y ch\u1ee9a danh s\u00e1ch c\u00e1c \u0111\u01b0\u1eddng d\u1eabn ho\u1eb7c \u0111\u1ecbnh d\u1ea1ng t\u1ec7p tin m\u00e0 b\u1ea1n mu\u1ed1n Git b\u1ecf qua, kh\u00f4ng theo d\u00f5i s\u1ef1 thay \u0111\u1ed5i c\u1ee7a ch\u00fang.<\/p>\n<p><em>V\u00ed d\u1ee5 n\u1ed9i dung file\u00a0<code>.gitignore<\/code>\u00a0c\u01a1 b\u1ea3n:<\/em><\/p>\n<pre><code class=\"language-text\">.env\r\nnode_modules\/\r\ndist\/\r\n*.log\r\n.DS_Store\r\n<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Luon-review-truoc-khi-push\"><\/span>Lu\u00f4n review tr\u01b0\u1edbc khi push<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Tr\u01b0\u1edbc khi \u0111\u1ea9y code l\u00ean remote server, h\u00e3y t\u1eadp th\u00f3i quen ch\u1ea1y c\u00e1c l\u1ec7nh ki\u1ec3m tra cu\u1ed1i c\u00f9ng \u0111\u1ec3 ch\u1eafc ch\u1eafn b\u1ea1n kh\u00f4ng \u0111\u1ea9y nh\u1ea7m code r\u00e1c ho\u1eb7c c\u00e1c file c\u1ea5u h\u00ecnh t\u1ea1m th\u1eddi:<\/p>\n<pre><code class=\"language-bash\">git status\r\ngit diff --staged\r\n<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Backup-repository-quan-trong\"><\/span>Backup repository quan tr\u1ecdng<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>M\u1eb7c d\u00f9 Git l\u00e0 h\u1ec7 th\u1ed1ng ph\u00e2n t\u00e1n v\u00e0 m\u1ed7i l\u1eadp tr\u00ecnh vi\u00ean \u0111\u1ec1u gi\u1eef m\u1ed9t b\u1ea3n sao l\u1ecbch s\u1eed, doanh nghi\u1ec7p v\u1eabn n\u00ean thi\u1ebft l\u1eadp c\u00e1c t\u00e1c v\u1ee5 sao l\u01b0u t\u1ef1 \u0111\u1ed9ng (backup) \u0111\u1ecbnh k\u1ef3 cho m\u00e1y ch\u1ee7 Git trung t\u00e2m \u0111\u1ec3 \u0111\u1ec1 ph\u00f2ng r\u1ee7i ro m\u1ea5t m\u00e1t ph\u1ea7n c\u1ee9ng.<\/p>\n<hr \/>\n<h2><span class=\"ez-toc-section\" id=\"Bao-Mat-Khi-Su-Dung-Git\"><\/span>B\u1ea3o M\u1eadt Khi S\u1eed D\u1ee5ng Git<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Nhung-du-lieu-khong-nen-commit\"><\/span>Nh\u1eefng d\u1eef li\u1ec7u kh\u00f4ng n\u00ean commit<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Nh\u01b0 \u0111\u00e3 \u0111\u1ec1 c\u1eadp, vi\u1ec7c v\u00f4 t\u00ecnh l\u1ed9 l\u1ecdt m\u1eadt kh\u1ea9u c\u01a1 s\u1edf d\u1eef li\u1ec7u, API key ho\u1eb7c th\u00f4ng tin kh\u00e1ch h\u00e0ng tr\u00ean Git l\u00e0 m\u1ed9t trong nh\u1eefng nguy\u00ean nh\u00e2n h\u00e0ng \u0111\u1ea7u d\u1eabn \u0111\u1ebfn c\u00e1c v\u1ee5 r\u00f2 r\u1ec9 d\u1eef li\u1ec7u nghi\u00eam tr\u1ecdng. N\u1ebfu l\u1ee1 commit nh\u1ea7m, vi\u1ec7c \u0111\u01a1n gi\u1ea3n l\u00e0 commit \u0111\u00e8 l\u00ean s\u1ebd kh\u00f4ng gi\u00fap b\u1ea1n x\u00f3a s\u1ea1ch th\u00f4ng tin \u0111\u00f3 v\u00ec n\u00f3 v\u1eabn t\u1ed3n t\u1ea1i trong l\u1ecbch s\u1eed commit c\u0169. B\u1ea1n s\u1ebd ph\u1ea3i s\u1eed d\u1ee5ng c\u00e1c c\u00f4ng c\u1ee5 chuy\u00ean d\u1ee5ng nh\u01b0\u00a0<code>git-filter-repo<\/code>\u00a0ho\u1eb7c BFG Repo-Cleaner \u0111\u1ec3 l\u00e0m s\u1ea1ch ho\u00e0n to\u00e0n l\u1ecbch s\u1eed.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Quan-ly-secrets\"><\/span>Qu\u1ea3n l\u00fd secrets<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>H\u00e3y t\u1eadn d\u1ee5ng c\u00e1c c\u00f4ng c\u1ee5 qu\u1ea3n l\u00fd th\u00f4ng tin b\u1ea3o m\u1eadt chuy\u00ean nghi\u1ec7p thay v\u00ec l\u01b0u tr\u1eef d\u1ea1ng text th\u00f4ng th\u01b0\u1eddng trong code:<\/p>\n<ul>\n<li>S\u1eed d\u1ee5ng c\u00e1c h\u1ec7 th\u1ed1ng l\u01b0u tr\u1eef t\u1eadp trung nh\u01b0 HashiCorp Vault.<\/li>\n<li>S\u1eed d\u1ee5ng t\u00ednh n\u0103ng\u00a0<strong>GitHub Secrets<\/strong>\u00a0ho\u1eb7c\u00a0<strong>GitLab Variables<\/strong>\u00a0\u0111\u1ec3 truy\u1ec1n c\u00e1c API key v\u00e0o quy tr\u00ecnh CI\/CD m\u1ed9t c\u00e1ch an to\u00e0n nh\u1ea5t.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"SSH-Key-thay-vi-Password\"><\/span>SSH Key thay v\u00ec Password<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>H\u00e3y thi\u1ebft l\u1eadp x\u00e1c th\u1ef1c qua <a href=\"https:\/\/interdata.vn\/blog\/ssh-la-gi\/\">giao th\u1ee9c SSH<\/a> thay v\u00ec HTTPS s\u1eed d\u1ee5ng m\u1eadt kh\u1ea9u\/token th\u00f4ng th\u01b0\u1eddng. SSH Key s\u1eed d\u1ee5ng c\u1eb7p kh\u00f3a m\u00e3 h\u00f3a c\u00f4ng khai v\u00e0 b\u00ed m\u1eadt gi\u00fap b\u1ea1n k\u1ebft n\u1ed1i an to\u00e0n v\u1edbi m\u00e1y ch\u1ee7 Git m\u00e0 kh\u00f4ng c\u1ea7n nh\u1eadp l\u1ea1i m\u1eadt kh\u1ea9u m\u1ed7i l\u1ea7n \u0111\u1ea9y code.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Kiem-tra-lich-su-commit-de-tranh-lo-du-lieu\"><\/span>Ki\u1ec3m tra l\u1ecbch s\u1eed commit \u0111\u1ec3 tr\u00e1nh l\u1ed9 d\u1eef li\u1ec7u<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>B\u1ea1n c\u00f3 th\u1ec3 t\u00edch h\u1ee3p c\u00e1c c\u00f4ng c\u1ee5 t\u1ef1 \u0111\u1ed9ng qu\u00e9t m\u00e3 ngu\u1ed3n nh\u01b0\u00a0<strong>GitGuardian<\/strong>\u00a0ho\u1eb7c\u00a0<strong>TruffleHog<\/strong>\u00a0v\u00e0o quy tr\u00ecnh commit c\u1ee5c b\u1ed9 (s\u1eed d\u1ee5ng pre-commit hooks) \u0111\u1ec3 t\u1ef1 \u0111\u1ed9ng ng\u0103n ch\u1eb7n vi\u1ec7c \u0111\u1ea9y nh\u1ea7m c\u00e1c chu\u1ed7i kh\u00f3a b\u1ea3o m\u1eadt (secrets) l\u00ean server.<\/p>\n<hr \/>\n<h2><span class=\"ez-toc-section\" id=\"Mot-So-Cau-Hoi-Thuong-Gap\"><\/span>M\u1ed9t S\u1ed1 C\u00e2u H\u1ecfi Th\u01b0\u1eddng G\u1eb7p<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"1-Git-va-GitHub-co-giong-nhau-khong\"><\/span>1. Git v\u00e0 GitHub c\u00f3 gi\u1ed1ng nhau kh\u00f4ng?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Kh\u00f4ng. Git l\u00e0 c\u00f4ng c\u1ee5 qu\u1ea3n l\u00fd phi\u00ean b\u1ea3n ch\u1ea1y tr\u1ef1c ti\u1ebfp tr\u00ean m\u00e1y t\u00ednh c\u1ee7a b\u1ea1n. C\u00f2n GitHub l\u00e0 m\u1ed9t d\u1ecbch v\u1ee5 <a href=\"https:\/\/interdata.vn\/blog\/cloud-storage-la-gi\/\">l\u01b0u tr\u1eef \u0111\u00e1m m\u00e2y<\/a> cung c\u1ea5p giao di\u1ec7n web \u0111\u1ec3 b\u1ea1n t\u1ea3i c\u00e1c kho l\u01b0u tr\u1eef Git l\u00ean \u0111\u00f3 v\u00e0 chia s\u1ebb v\u1edbi m\u1ecdi ng\u01b0\u1eddi. B\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng Git m\u00e0 kh\u00f4ng c\u1ea7n GitHub, nh\u01b0ng kh\u00f4ng th\u1ec3 s\u1eed d\u1ee5ng GitHub hi\u1ec7u qu\u1ea3 n\u1ebfu thi\u1ebfu Git.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"2-Nguoi-moi-nen-hoc-GitHub-hay-Git-truoc\"><\/span>2. Ng\u01b0\u1eddi m\u1edbi n\u00ean h\u1ecdc GitHub hay Git tr\u01b0\u1edbc?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>B\u1ea1n b\u1eaft bu\u1ed9c ph\u1ea3i h\u1ecdc s\u1eed d\u1ee5ng Git tr\u01b0\u1edbc. Hi\u1ec3u \u0111\u01b0\u1ee3c c\u00e1c kh\u00e1i ni\u1ec7m c\u1ed1t l\u00f5i c\u1ee7a Git nh\u01b0 commit, branch, merge s\u1ebd gi\u00fap b\u1ea1n nhanh ch\u00f3ng l\u00e0m quen v\u00e0 khai th\u00e1c t\u1ed1t m\u1ecdi t\u00ednh n\u0103ng tr\u00ean giao di\u1ec7n c\u1ee7a GitHub ho\u1eb7c GitLab.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"3-Git-co-mien-phi-khong\"><\/span>3. Git c\u00f3 mi\u1ec5n ph\u00ed kh\u00f4ng?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ho\u00e0n to\u00e0n mi\u1ec5n ph\u00ed. Git l\u00e0 ph\u1ea7n m\u1ec1m m\u00e3 ngu\u1ed3n m\u1edf v\u00e0 b\u1ea1n c\u00f3 th\u1ec3 t\u1ef1 do t\u1ea3i v\u1ec1, c\u00e0i \u0111\u1eb7t v\u00e0 s\u1eed d\u1ee5ng cho m\u1ecdi m\u1ee5c \u0111\u00edch c\u00e1 nh\u00e2n l\u1eabn th\u01b0\u01a1ng m\u1ea1i.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"4-GitLab-co-thay-the-GitHub-duoc-khong\"><\/span>4. GitLab c\u00f3 thay th\u1ebf GitHub \u0111\u01b0\u1ee3c kh\u00f4ng?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>C\u00f3. C\u1ea3 hai \u0111\u1ec1u cung c\u1ea5p c\u00e1c t\u00ednh n\u0103ng c\u1ed1t l\u00f5i l\u00e0 l\u01b0u tr\u1eef m\u00e3 ngu\u1ed3n d\u1ef1a tr\u00ean Git. GitLab th\u1eadm ch\u00ed c\u00f2n \u0111\u01b0\u1ee3c \u0111\u00e1nh gi\u00e1 r\u1ea5t cao \u1edf <a href=\"https:\/\/interdata.vn\/blog\/array-la-gi\/\">m\u1ea3ng<\/a> CI\/CD t\u1ef1 \u0111\u1ed9ng v\u00e0 kh\u1ea3 n\u0103ng cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng t\u1ef1 c\u00e0i \u0111\u1eb7t <a href=\"https:\/\/interdata.vn\/blog\/dedicated-server-la-gi\/\">m\u00e1y ch\u1ee7 ri\u00eang<\/a> (Self-hosted).<\/p>\n<h3><span class=\"ez-toc-section\" id=\"5-git-pull-va-git-fetch-khac-nhau-the-nao\"><\/span>5. git pull v\u00e0 git fetch kh\u00e1c nhau th\u1ebf n\u00e0o?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><code>git fetch<\/code>\u00a0ch\u1ec9 t\u1ea3i c\u00e1c commit m\u1edbi t\u1eeb server v\u1ec1 m\u00e1y nh\u01b0ng kh\u00f4ng can thi\u1ec7p v\u00e0o code b\u1ea1n \u0111ang vi\u1ebft.<\/li>\n<li><code>git pull<\/code>\u00a0v\u1eeba t\u1ea3i d\u1eef li\u1ec7u m\u1edbi v\u1ec1 v\u1eeba t\u1ef1 \u0111\u1ed9ng th\u1ef1c hi\u1ec7n l\u1ec7nh merge \u0111\u1ec3 g\u1ed9p m\u00e3 ngu\u1ed3n m\u1edbi v\u00e0o code hi\u1ec7n t\u1ea1i c\u1ee7a b\u1ea1n.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"6-Co-nen-dung-Git-cho-du-an-ca-nhan\"><\/span>6. C\u00f3 n\u00ean d\u00f9ng Git cho d\u1ef1 \u00e1n c\u00e1 nh\u00e2n?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>R\u1ea5t n\u00ean d\u00f9ng. K\u1ec3 c\u1ea3 khi l\u00e0m vi\u1ec7c m\u1ed9t m\u00ecnh, Git v\u1eabn gi\u00fap b\u1ea1n l\u01b0u l\u1ea1i c\u00e1c m\u1ed1c ph\u00e1t tri\u1ec3n quan tr\u1ecdng c\u1ee7a d\u1ef1 \u00e1n, th\u1eed nghi\u1ec7m c\u00e1c t\u00ednh n\u0103ng m\u1edbi tr\u00ean c\u00e1c nh\u00e1nh ph\u1ee5 m\u1ed9t c\u00e1ch an to\u00e0n v\u00e0 d\u1ec5 d\u00e0ng \u0111\u1ed3ng b\u1ed9 code gi\u1eefa m\u00e1y t\u00ednh \u1edf nh\u00e0 v\u00e0 laptop c\u00e1 nh\u00e2n.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"7-Git-co-chay-tren-VPS-duoc-khong\"><\/span>7. Git c\u00f3 ch\u1ea1y tr\u00ean VPS \u0111\u01b0\u1ee3c kh\u00f4ng?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>C\u00f3. B\u1ea1n ho\u00e0n to\u00e0n c\u00f3 th\u1ec3 thu\u00ea m\u1ed9t <a href=\"https:\/\/interdata.vn\/blog\/vps-linux-la-gi\/\">VPS Linux<\/a> ri\u00eang \u0111\u1ec3 c\u00e0i \u0111\u1eb7t Git v\u00e0 c\u1ea5u h\u00ecnh n\u00f3 l\u00e0m m\u00e1y ch\u1ee7 l\u01b0u tr\u1eef trung t\u00e2m cho \u0111\u1ed9i ng\u0169 ph\u00e1t tri\u1ec3n c\u1ee7a m\u00ecnh.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"8-Co-the-tu-xay-dung-Git-Server-rieng-khong\"><\/span>8. C\u00f3 th\u1ec3 t\u1ef1 x\u00e2y d\u1ef1ng Git Server ri\u00eang kh\u00f4ng?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>C\u00f3. B\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng c\u00e1c \u1ee9ng d\u1ee5ng m\u00e3 ngu\u1ed3n m\u1edf nh\u01b0 Gitea, Forgejo ho\u1eb7c GitLab Self-managed c\u00e0i \u0111\u1eb7t tr\u00ean m\u1ed9t m\u00e1y ch\u1ee7 VPS ri\u00eang bi\u1ec7t, b\u1ea1n s\u1ebd s\u1edf h\u1eefu m\u1ed9t h\u1ec7 th\u1ed1ng Git Server an to\u00e0n, b\u1ea3o m\u1eadt tuy\u1ec7t \u0111\u1ed1i v\u1edbi chi ph\u00ed t\u1ed1i \u01b0u nh\u1ea5t.<\/p>\n<hr \/>\n<p>Vi\u1ec7c n\u1eafm v\u1eefng c\u00e1c l\u1ec7nh Git c\u01a1 b\u1ea3n l\u00e0 vi\u00ean g\u1ea1ch \u0111\u1ea7u ti\u00ean gi\u00fap b\u1ea1n v\u1eefng b\u01b0\u1edbc tr\u00ean con \u0111\u01b0\u1eddng ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m chuy\u00ean nghi\u1ec7p. T\u1eeb vi\u1ec7c kh\u1edfi t\u1ea1o kho ch\u1ee9a, qu\u1ea3n l\u00fd nh\u00e1nh cho \u0111\u1ebfn vi\u1ec7c ph\u1ed1i h\u1ee3p \u0111\u1ed3ng b\u1ed9 m\u00e3 ngu\u1ed3n v\u1edbi Remote Server, t\u1ea5t c\u1ea3 \u0111\u1ec1u l\u00e0 nh\u1eefng k\u1ef9 n\u0103ng kh\u00f4ng th\u1ec3 thi\u1ebfu \u0111\u1ed1i v\u1edbi m\u1ecdi Developer, DevOps Engineer v\u00e0 SysAdmin ng\u00e0y nay.<\/p>\n<p>H\u00e3y b\u1eaft \u0111\u1ea7u b\u1eb1ng vi\u1ec7c th\u1ef1c h\u00e0nh h\u00e0ng ng\u00e0y th\u00f4ng qua c\u00e1c l\u1ec7nh \u0111\u01a1n gi\u1ea3n nh\u01b0\u00a0<code>git status<\/code>,\u00a0<code>git add<\/code>\u00a0v\u00e0\u00a0<code>git commit<\/code>. S\u1ef1 nhu\u1ea7n nhuy\u1ec5n trong vi\u1ec7c s\u1eed d\u1ee5ng d\u00f2ng l\u1ec7nh s\u1ebd gi\u00fap b\u1ea1n l\u00e0m ch\u1ee7 m\u00e3 ngu\u1ed3n c\u1ee7a m\u00ecnh m\u1ed9t c\u00e1ch ch\u1ee7 \u0111\u1ed9ng nh\u1ea5t. Ch\u00fac c\u00e1c b\u1ea1n th\u00e0nh c\u00f4ng tr\u00ean con \u0111\u01b0\u1eddng h\u1ecdc t\u1eadp v\u00e0 l\u00e0m vi\u1ec7c v\u1edbi Git!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Trong k\u1ef7 nguy\u00ean ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m hi\u1ec7n \u0111\u1ea1i, vi\u1ec7c qu\u1ea3n l\u00fd m\u00e3 ngu\u1ed3n hi\u1ec7u qu\u1ea3 kh\u00f4ng ch\u1ec9 l\u00e0 y\u00eau c\u1ea7u b\u1eaft bu\u1ed9c \u0111\u1ed1i v\u1edbi c\u00e1c l\u1eadp tr\u00ecnh vi\u00ean m\u00e0 c\u00f2n l\u00e0 n\u1ec1n t\u1ea3ng c\u1ed1t l\u00f5i c\u1ee7a quy tr\u00ecnh DevOps v\u00e0 CI\/CD. Trong \u0111\u00f3, Git n\u1ed5i l\u00ean nh\u01b0 m\u1ed9t c\u00f4ng c\u1ee5 qu\u1ea3n l\u00fd phi\u00ean b\u1ea3n<\/p>\n","protected":false},"author":2,"featured_media":41594,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[140],"tags":[],"class_list":["post-41591","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-lap-trinh"],"_links":{"self":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/41591","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/comments?post=41591"}],"version-history":[{"count":3,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/41591\/revisions"}],"predecessor-version":[{"id":41595,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/41591\/revisions\/41595"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/media\/41594"}],"wp:attachment":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/media?parent=41591"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/categories?post=41591"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/tags?post=41591"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}