Learn Git - Android Mastery by Dan Tech
Learn Git - Android Mastery by Dan Tech

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 ClientGiá
Git CLIFree
Git DesktopFree
Git KrakenFree or 2$/Month
Smart Git59$ / Year
Source TreeFree
Bảng liệt kê các phần mềm Git Client thông dụng miễn phí – Android Mastery by Danh

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 checkoutlà 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ột request lên remote repository để nhận lại thông tin mới nhất của repository. Các thông tin mới nhất này (commits, branches, …) sẽ chưa apply ngay lên local 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 1 branch để 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ọi git 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 branch feature được tách ra từ branch master , sau một quá trình phát triển, branch feature lúc này đã có n commits. Tuy nhiên vì thời gian trôi qua nhiều nên trên branch master 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 merge feature vào master . Lúc này có thể hình dùng branch feature sẽ có n commits được nằm trên master + 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!