Cơ bản về Git
Git là gì?
Git một hệ thống quản lý phiên bản (Version Control System - VCS) được sử dụng rộng rãi trong quản lý mã nguồn và phát triển phần mềm. Git cung cấp cho các lập trình viên một kho lưu trữ (repository) chứa toàn bộ lịch sử thay đổi của hệ thống.
Git được tạo ra bởi Linus Torvalds vào năm 2005, và nhanh chóng trở thành một trong những công cụ quản lý phiên bản phổ biến và quan trọng nhất trên toàn cầu.
Một số dịch vụ lưu trữ Git tốt nhất hiện nay có thể kể đến như Github, Gitlab, Bitbucket...
Git hoạt động như thế nào?
Git coi thông tin được lưu trữ là một tập hợp các snapshots – ảnh chụp toàn bộ nội dung tất cả các file tại một thời điểm nhất định.
Khi người dùng đưa ra lệnh, Git sẽ "chụp" lại thông tin và tạo ra một snapshot cùng một tham chiếu tới snapshot đó. Để đạt hiệu quả cao, Git chỉ lưu trữ file khi file có sự thay đổi, các file không thay đổi, Git sẽ chỉ lưu trữ lại một liên kết đến file ở phiên bản trước đó mà nó đã lưu trữ.
Với cách hoạt động này, Git sẽ giúp cho việc lưu trữ dễ dàng hơn và không tốn nhiều thời gian để xem xét lại các thông tin không cần thiết.
Vì sao sử dụng Git?
- Git giúp theo dõi thay đổi mã nguồn theo thời gian, kiểm soát lịch sử sửa đổi.
- Git cho phép nhiều nhà phát triển cùng làm việc trên một dự án, giúp hạn chế xung đột khi họ cùng sửa mã nguồn.
- Khi gặp lỗi hoặc thay đổi không mong muốn, Git cho phép quay trở lại (revert) phiên bản trước đó.
- Git cho phép nhà phát triển làm việc ngoại tuyến (offline), làm việc từ xa hoặc phân tán.
- Git là mã nguồn mở, được sử dụng rộng rãi và miễn phí.
- Git giúp việc phân chia và sắp xếp các công việc dễ dàng, hiệu quả hơn, có thể thực hiện nhiều công việc cùng một lúc.
Các thuật ngữ quan trọng trong Git
Repository (Kho lưu trữ)
Repository (hay còn gọi là Repo) là nơi chứa tất cả mã nguồn và lịch sử thay đổi của dự án.
Repository có 2 loại:
- Remote Repository: Đặt trên git server, có khả năng chia sẻ với nhiều người.
- Local Repository: Đặt trên máy cá nhân, dành riêng cho người dùng.
Branch (nhánh)
Branch là một khu vực làm việc độc lập của repository.
Khi tạo repository, một nhánh chính (master/main) sẽ được tạo sẵn. Tương ứng với mỗi nhiệm vụ chúng ta sẽ tạo một nhánh con và làm việc trên đó. Những thay đổi trên nhánh con không ảnh hưởng đến nhánh chính, điều này cho phép giải quyết nhiều nhiệm vụ cùng một lúc trên cùng một kho chứa mà ít có xung đột lẫn nhau. Ta cũng có thể kết hợp (merge) các nhánh lại với nhau.
Tương tự Repository, Branch cũng chia thành 2 loại:
- Remote Branch: Lưu trên git server, có thể chia sẻ.
- Local branch: Lưu trên máy cá nhân, có thể liên kết với remote branch hoặc không.
Một số thuật ngữ khác
| Thuật ngữ | Mô tả |
|---|---|
| Commit | Một bản ghi lưu trữ các thay đổi đã thực hiện trong repo, được đánh dấu với thông tin và mã xác nhận. |
| Check out | Chuyển đổi giữa các nhánh hoặc commit cụ thể. |
| Fetch | Lấy thông tin mới từ remote repository nhưng không tự động kết hợp với local repository. |
| Fork | Tạo một bản sao của một repository public trong tài khoản git của bạn để đóng góp hoặc sửa lỗi. |
| Head | Trỏ đến commit hiện tại trong nhánh làm việc và thường là commit cuối cùng trên nhánh. |
| Index | Vùng trung gian giữa working directory và repository, nơi tập tin chờ được commit. |
| Master | Tên mặc định của nhánh chính trong một repository. |
| Merge | Kết hợp các thay đổi từ nhánh khác vào nhánh hiện tại. |
| Origin | Tên mặc định của remote repository khi bạn clone hoặc sao chép repository. |
| Pull | Kết hợp các thay đổi từ remote repository vào local repository và tự động kết hợp. |
| Push | Đẩy các thay đổi từ local repository lên remote repository. |
| Rebase | Di chuyển chuỗi các commit hiện tại lên đầu của một nhánh khác để tạo lịch sử tuyến tính hơn. |
| Remote | Remote là một bản sao của repository trên máy tính hoặc máy chủ khác. |
| Stash | Lưu trữ tạm thời các thay đổi chưa commit để chuyển qua công việc khác. |
| Tags | Đánh dấu một điểm cụ thể trong lịch sử commit để dễ dàng truy cập sau này. |
| Upstream | Remote repository mà bạn sao chép từ đó hoặc theo dõi để cập nhật các thay đổi. |
Các lệnh git cơ bản
| Lệnh | Mô tả | Cú pháp |
|---|---|---|
| git config | Cấu hình thông tin người dùng hoặc repository. | git config [–-global] user.name "Name" git config [–-global] user.email "Email" |
| git init | Khởi tạo ra một repository mới trong thư mục hiện tại. | git init |
| git clone | Sao chép một repository từ remote về máy local. | git clone remote_repository_URL |
| git status | Hiển thị trạng thái của các tập tin trong working directory và staging area. | git status |
| git add | Đưa các tập tin từ working directory vào staging area. | git add tên_tập_tin # thêm tất cả các files git add . |
| git commit | Tạo một commit từ các tập tin trong staging area. | git commit -m “commit message” |
| git push | Đẩy các commit từ local repository lên remote repository. | git push remote_name branch_name |
| git pull | Kéo các commit mới từ remote repository về local repository. | git pull remote_name branch_name |
| git branch | Quản lý các nhánh có trong repository. | # xem danh sách nhánh git branch # tạo nhánh git branch tên_nhánh # xóa nhánh git branch -d tên_nhánh |
| git checkout | Chuyển đổi giữa các nhánh hoặc commit cụ thể. | git checkout tên_nhánh git checkout commit_hash |
| git stash | Tạm thời lưu trữ các thay đổi chưa commit để chuyển sang công việc khác. | git stash # áp dụng các thay đổi tạm thời git stash apply |
| git merge | Kết hợp các thay đổi từ một nhánh khác vào nhánh hiện tại. | git merge tên_nhánh |
| git reset | Đặt lại trạng thái của HEAD hoặc staging area theo commit cụ thể. | # giữ lại thay đổi trong staging area git reset –soft commit_hash # hủy bỏ thay đổi git reset –hard commit_hash |
| git remote | Quản lý các remote repository đã được liên kết với local repository. | git remote add remote_name URL_remote # hiển thị danh sách các remote git remote -v |
Những lưu ý khi làm việc với Git là gì?
Để sử dụng Git hiệu quả, bạn cần lưu ý:
- Sử dụng Git Cheat Sheets để nhớ các lệnh
- Commit liên tục và thường xuyên
- Kiểm tra trước khi commit Git
- Viết ghi chú rõ ràng khi commit
- Mỗi nhiệm vụ khác nhau nên tạo và làm trên những branch khách nhau.