{"id":21341031,"url":"https://github.com/meicloudie/demo_git","last_synced_at":"2026-05-20T15:12:31.269Z","repository":{"id":240855842,"uuid":"803595797","full_name":"MeiCloudie/demo_git","owner":"MeiCloudie","description":"CyberSoft Academy - Git","archived":false,"fork":false,"pushed_at":"2024-05-22T10:39:32.000Z","size":175,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-05-22T11:32:08.367Z","etag":null,"topics":["course-project","git","github"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MeiCloudie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-21T03:04:33.000Z","updated_at":"2024-05-22T10:39:36.000Z","dependencies_parsed_at":"2024-11-22T00:54:50.846Z","dependency_job_id":"5d83ceed-d80f-4deb-8066-98562735dbf2","html_url":"https://github.com/MeiCloudie/demo_git","commit_stats":null,"previous_names":["meicloudie/demo_git"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeiCloudie%2Fdemo_git","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeiCloudie%2Fdemo_git/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeiCloudie%2Fdemo_git/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeiCloudie%2Fdemo_git/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MeiCloudie","download_url":"https://codeload.github.com/MeiCloudie/demo_git/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243817873,"owners_count":20352626,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["course-project","git","github"],"created_at":"2024-11-22T00:54:48.242Z","updated_at":"2026-05-20T15:12:31.226Z","avatar_url":"https://github.com/MeiCloudie.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CYBERSOFT ACADEMY\n\n_(Lớp BootCamp Sáng 12 - Năm 2024 - Khoá Front-End)_\n\n\u003cdiv align=\"center\"\u003e\n\t\u003cpicture\u003e\n\t\t\u003cimg loading=\"lazy\" width=\"100%\" src=\"./img/banner-cybersoft-course.png\" alt=\"Banner\"\u003e\n\t\u003c/picture\u003e\n\u003c/div\u003e\n\n## [Buổi 10] THỰC HÀNH GIT\n\n# Mục tiêu\n\n1. Version Control System\n\n2. Git và GitHub\n\n3. Cài đặt Git\n\n4. Khởi tạo dự án mới\n\n5. Tham gia vào dự án có sẵn\n\n6. Phát triển dự án\n\n7. Branch\n\n\u003chr\u003e\n\n\u003e Bài làm của Trương Thục Vân.\n\n# CÁC CÂU LỆNH THỰC HÀNH\n\n## Khởi tạo Repository và Thêm Remote\n\n```sh\ngit init\n```\n\n- Lệnh này khởi tạo một Git repository mới trong thư mục hiện tại. Sau khi chạy lệnh này, một thư mục ẩn .git sẽ được tạo ra.\n\n```sh\ngit remote add origin https://github.com/MeiCloudie/demo_git.git\n```\n\n- Lệnh này thêm một remote repository mới có tên là origin, liên kết đến URL chỉ định.\n\n- Remote repository là một phiên bản Git repository được lưu trữ trên mạng hoặc một máy chủ khác.\n\n- Đường dẫn \"https...\" là đường dẫn đến repository hiện tại của bạn.\n\n## Thêm và Kiểm tra Trạng thái Thay Đổi\n\n```sh\ngit add .\n```\n\n- Lệnh này thêm tất cả các thay đổi trong thư mục hiện tại vào staging area (khu vực chờ để commit).\n\n```sh\ngit status\n```\n\n- Lệnh này hiển thị trạng thái của working directory và staging area, cho biết những thay đổi nào đã được staged, chưa được staged và những file nào chưa được theo dõi.\n\n## Commit và Xem Lịch Sử Commit\n\n```sh\ngit commit -m \"Initialize project\"\n```\n\n- Lệnh này tạo một commit mới với thông điệp \"Initialize project\". Commit là một ảnh chụp của tất cả các thay đổi đã được staged.\n\n```sh\ngit log\n```\n\n- Lệnh này hiển thị lịch sử các commit trong repository, bao gồm thông tin về tác giả, ngày tháng và thông điệp commit.\n\n## Đẩy Thay Đổi Lên Remote Repository\n\n```sh\ngit push -u origin master\n```\n\nhoặc\n\n```sh\ngit push -u origin main\n```\n\n- Lệnh này đẩy các commit từ nhánh master/main lên remote repository origin.\n\n- Tham số -u thiết lập nhánh upstream cho nhánh hiện tại, nghĩa là trong các lần push sau, chỉ cần sử dụng git push mà không cần chỉ định remote và nhánh.\n\n- LƯU Ý: Lệnh **push** sẽ đi kèm với **-u origin** + tên nhánh =\u003e **THỰC HIỆN CHO LẦN ĐẦU TIÊN PUSH**!\n\n- Các lần push sau chỉ cần câu lệnh đơn giản là:\n\n```sh\ngit push\n```\n\n\u003e Sau khi code xong 1 phần sẽ thực hiện: `git add .` =\u003e `git commit -m \"nội dung commit\"` =\u003e `git push`\n\n## Quản Lý Các Nhánh\n\n```sh\ngit branch\n```\n\n- Lệnh này liệt kê tất cả các nhánh hiện có trong repository, với nhánh hiện tại được đánh dấu bằng dấu sao (\\*) hoặc màu xanh.\n\n```sh\ngit branch nhanh1\n```\n\n- Lệnh này tạo một nhánh mới có tên \"nhanh1\" (chỉ tạo mà CHƯA nhảy qua nhánh nhanh1).\n\n```sh\ngit checkout nhanh1\n```\n\n- Lệnh này chuyển đổi sang nhánh nhanh1 (nghĩa là khi sử dụng `git branch` nhánh hiện tại sẽ được chuyển qua \"nhanh1\").\n\n```sh\ngit checkout -b nhanh1\n```\n\n- Lệnh này tạo một nhánh mới có tên \"nhanh1\" và chuyển đổi sang nhánh này ngay lập tức (câu lệnh kết hợp 2 thao tác trên).\n\n## Sao chép Repository\n\n```sh\ngit clone https://github.com/MeiCloudie/demo_git.git\n```\n\n- Lệnh này sao chép một repository hiện có từ một remote repository (URL chỉ định) về máy tính của bạn.\n\n- Nó sẽ tạo một thư mục mới có cùng tên với repository và sao chép tất cả các file và lịch sử commit vào đó.\n\n- Đường dẫn \"https...\" là đường dẫn của repository bạn muốn clone về.\n\n## Gộp Các Nhánh (Merge)\n\n```sh\ngit merge nhanh1\n```\n\n- Lệnh này gộp các thay đổi từ nhánh \"nhanh1\" vào nhánh hiện tại.\n\n- Check nhánh hiện tại bằng lệnh `git branch`.\n\n- Nếu có conflict (xung đột), Git sẽ yêu cầu bạn giải quyết xung đột trước khi hoàn thành merge.\n\n## Các Trường Hợp Conflict và Cách Giải Quyết\n\n### Conflict Khi Merge (có xung đột code)\n\n- Khi gộp hai nhánh lại với nhau, nếu có thay đổi khác nhau trên cùng một dòng của cùng một file, hoặc nếu một nhánh thay đổi một file mà nhánh kia đã xóa, thì sẽ xảy ra conflict.\n\n#### Giải quyết conflict:\n\n1. Xem các file bị conflict:\n\n```sh\ngit status\n```\n\n2. Chỉnh sửa file để giải quyết conflict:\n\n- Các phần bị conflict sẽ được đánh dấu bằng các ký hiệu như `\u003c\u003c\u003c\u003c\u003c\u003c\u003c`, `=======`, và `\u003e\u003e\u003e\u003e\u003e\u003e\u003e`. Bạn cần chỉnh sửa các phần này để giữ lại thay đổi mong muốn.\n\n- Bên trên các phần đó sẽ có các option để chọn cập nhật.\n\n3. Thêm file đã giải quyết conflict vào staging area:\n\n```sh\ngit add \u003cfile\u003e\n```\n\n- Với `\u003cfile\u003e` là file (tệp) bạn vừa thay đổi và muốn cập nhật lại.\n\n4. Hoàn thành merge:\n\n```sh\ngit commit -m \"Resolve Conflict and Merge Code\"\n```\n\n- Như vậy là đã giải quyết được các xung đột code, sau khi commit có thể sẵn sàng push.\n\n#### Pull và Merge\n\n```sh\ngit pull origin master\n```\n\n- Lệnh này kéo các thay đổi từ nhánh master (hoặc có thể là nhánh `main`, hoặc nhánh hiện tại cần pull) của remote origin và tự động thực hiện merge vào nhánh hiện tại.\n\n- Nếu có conflict, bạn cần giải quyết conflict như đã hướng dẫn ở trên.\n\n#### Rebase\n\n```sh\ngit rebase \u003cbranch\u003e\n```\n\n- Lệnh này áp dụng lại các commit của nhánh hiện tại lên trên commit mới nhất của `\u003cbranch\u003e`. Nó giúp giữ lịch sử commit gọn gàng hơn so với merge.\n\n- Giải quyết conflict khi rebase:\n\n1. Khi xảy ra conflict, Git sẽ dừng lại và yêu cầu bạn giải quyết conflict:\n\n```sh\ngit status\n```\n\n2. Chỉnh sửa file để giải quyết conflict và thêm vào staging area:\n\n```sh\ngit add \u003cfile\u003e\n```\n\n3. Tiếp tục rebase:\n\n```sh\ngit rebase --continue\n```\n\n4. Hủy bỏ rebase nếu cần thiết:\n\n```sh\ngit rebase --abort\n```\n\n\u003e Đã cập nhật xong!\n\n# THAM KHẢO THÊM VỀ GIT\n\n\u003e Mình liệt kê thêm một số link để có thể tham khảo thêm về các câu lệnh của Git. Ưu tiên sử dụng lệnh thay vì các UI trên các IDE nhé!\n\n- [Git Cheatsheet - cs.fyi](https://cs.fyi/guide/git-cheatsheet)\n\n- [GIT CHEATSHEET - GitHub Education](https://education.github.com/git-cheat-sheet-education.pdf)\n\n- [Git Cheat Sheet (2024) - All Git Commands - GeeksforGeeks](https://www.geeksforgeeks.org/git-cheat-sheet/)\n\n- [Git \u0026 GitHub Crash Course For Beginners](https://www.youtube.com/watch?v=SWYqp7iY_Tc)\n\n- [Git \u0026 GitHub Crash Course 2023](https://youtu.be/ulQA5tjJark?si=a0EqqAUctyxbtdg7)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeicloudie%2Fdemo_git","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmeicloudie%2Fdemo_git","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeicloudie%2Fdemo_git/lists"}