Git 101: Tất cả kiến thức bạn cần để trở thành Software Engineer
Để tiết kiệm thời gian bạn có thể tham khảo ngay GitHub Repository này nhé!
Khái niệm Version Control
Version Control là một công cụ hỗ trợ, đóng vai trò là người bảo vệ của dự án. Version Control giúp theo dõi mọi thay đổi trong mã nguồn, đảm bảo mọi thay đổi dù nhỏ nhất cũng được ghi lại.
Version Control cho phép Lập trình viên quay ngược lại trạng thái cũ của Mã nguồn phần mềm về 1 phiên bản bất kỳ trong quá khứ. Những hỗ trợ này của Version Control giúp cho quá trình phát triển phần mềm của Lập trình viên được dễ dàng và an toàn hơn rất nhiều.
Tại sao lại cần Version Control
- Version Control giúp lưu trữ lịch sử của mã nguồn rõ ràng, minh bạch. Tất cả mọi thay đổi nhỏ nhất trong dự án đều được định danh.
- Giúp cho quá trình cộng tác nhiều người trên cùng 1 dự án trở nên hiệu quả, dễ dàng hơn.
- Khi có sự cố xảy ra, Version Control có thể hỗ trợ Lập trình viên revert trạng thái mã nguồn về 1 phiên bản an toàn hơn trong quá khứ mà không mất quá nhiều công sức.
Phân biệt Git, GitHub
- Git là tên của một phần mềm Version Control được nhiều Lập trình viên sử dụng nhất hiện nay.
- GitHub là 1 nền tảng cung cấp dịch vụ lưu trữ, quản lý, deploy các dự án được quản lý bởi Git
- Ngoài GitHub chúng ta còn có thể sử dụng dịch vụ của GitLab, Bitbucket, hoặc tự build cho mình 1 host riêng để quản lý các dự án của mình thông qua Git.
Các phần mềm client hỗ trợ sử dụng Git
Có rất nhiều phần mềm client hỗ trợ sử dụng Git. Có phí hoặc thu phí
Git Client | Giá |
Git CLI | Free |
Git Desktop | Free |
Git Kraken | Free or 2$/Month |
Smart Git | 59$ / Year |
Source Tree | Free |
Tùy vào mục đích sử dụng, số tiền bạn có và thói quen của mỗi Lập trình viên mà bạn có thể chọn phần mềm phù hợp.
Khuyến nghị: Sử dụng Git Desktop làm Git Client và GitHub là host lưu trữ các dự án của bạn.
Các khái niệm Cơ bản trong Git
git config
là một git command line sử dụng để get hoặc set configuration của git trên máy của bạn (Lập trình viên). Các configuration này có thể là tên, email của bạn.
git config --global user.name "dantech0xff"
git config --global user.email "dantech0xff@github.com"
git init
là một git command line sử dụng để khởi tạo một Local Repository
git init
git add
là một git command line sử dụng để add một (hoặc nhiều) thay đổi vào trạng thái staged để chuẩn bị cho 1 commit
git add path-to-file-changes // add only 1 file
git add . // add all changes
git commit
là một git command line sử dụng để tạo một commit lên repository với những file đang trong trạng thái staged . Mỗi commit có thể hiểu là một đơn vị nhỏ nhất để tạo lên log (history) của 1 repository.
git commit -m"commit message"
git push
là một git command line sử dụng để tạo một request lên remote repository. Request này sẽ kiểm tra và xác nhận xem các commit ở local được được chấp thuận ghi lên remote hay không? Nếu có lỗi trong quá trình này, bắt buộc chúng ta phải cập nhật lại trạng thái của branch trước khi push.
git push
git pull
là một git command line sử dụng để tạo một request lên remote repository. Request này sẽ kéo xuống tất cả những thay đổi mới nhất của branch hiện tại bạn đang đứng. Sau đó apply các thay đổi này (nếu có) cho local repository của bạn. Trong thực tế sẽ có 2 loại pull đó là pull rebase và pull merge. Chi tiết trong quá trình học mình sẽ hướng dẫn bằng trực quan.
git pull
git checkout
là một git command line sử dụng để chuyển nhánh bạn đang trỏ vào trên local repository.git checkout
còn là câu lệnh ngắn gọn giúp bạn tạo 1 branch mới.
git checkout <branch-name> // switch branch sang <branch-name>
git checkout -b <branch-name> // create a new branch <branch-name> and switch
git merge
là một git command line sử dụng để merge 1 branch bất kỳ về branch bạn đang trỏ. Đây là câu lệnh bạn ít khi dùng trực tiếp! Thông thường bạn sẽ thao tác trên phần mềm Git Desktop để merge 2 branch. Hoặc là tạo 1 Merge Request / Pull Request sau đó xử lý thao tác merge trên nền tảng GitHub.
// assume you have a branch with the name is feature-01
// you're staying on a random branch
// you want to merge feature-01 to master branch
git checkout master
git merge feature-01
Các khái niệm Nâng cao trong Git
git fetch
là câu lệnh dùng để gửi mộtrequest
lênremote repository
để nhận lại thông tin mới nhất củarepository
. Các thông tin mới nhất này (commits
,branches
, …) sẽchưa apply
ngay lênlocal repository
mà sẽ cache lại trong 1 thư mục ẩn. Đây là câu lệnh thường được dùng đểkiểm tra xem repo đã có những thay đổi gì
sau 1 thời gian. Dựa vào thông tin trả về ta có thể lựa chọn 1branch
đểcheckout
và thực hiện các thao tác cần thiết khác.
git fetch master // fetch branch master
git fetch origin master:master // fetch branch master & update it to local without switch branch
git push --force
là một câu lệnh nguy hiểm. Bạn chỉ nên dùng nó khi thực sự cần thiết và hiểu rõ tính năng của nó. Giống như tên gọigit push --force
, khi thực hiện thao tác push từ local lên repo, git với option—-force
sẽ bỏ qua bước check xem local có cần sync với remote trước hay không. Tất cả mọi change ở local sẽ ghi đè lên remote.
git push --force-with-lease
git rebase
là một câu lệnh khó dùng. Hầu hết thời gian dùng rebase sẽ là dùng thông qua Git Client.git rebase
dùng khi 2 branch có chung base các commit gốc, và đang rẽ sang 2 hướng khác nhau. Context thường là một branchfeature
được tách ra từ branchmaster
, sau một quá trình phát triển, branchfeature
lúc này đã cón commits
. Tuy nhiên vì thời gian trôi qua nhiều nên trên branchmaster
lúc này cũng đã cóm commits
mới. Để giúp cho quá trình merge feature về master được thuận tiện, ta có 1 giải pháp đó làrebase
master
vềfeature
trước khi mergefeature
vàomaster
. Lúc này có thể hình dùngbranch
feature
sẽ cón commits
được nằm trênmaster + m commits
git rebase master
Chúc các bạn thành công. Nhớ chia sẻ nếu thấy bài viết hữu ích nha!