Học Git cơ bản cho người mới bắt đầu

Hoc-git-co-ban-cho-nguoi-moi-bat-dau

Trong bài này chúng ta cùng học Git cơ bản. Git là một phần mềm quản lý version rất nổi tiếng, được sử dụng rất nhiều trong sử dụng phần mềm.

Tại sao chúng ta cần GIT

Bạn là một lập trình viên:

  • Đã bao giờ bạn vô tình làm các dòng code rối tung lên hay vô tình xóa các file đi và chương trình gặp lỗi.
  • Vậy làm sao để hoàn nguyên code về trạng thái cũ, chẳng nhẽ lúc nào cũng tạo bản backup, 10 lần backup là 10 bản.

Bạn là một lập trình viên:

  • Bạn tham gia trong một dự án, bạn muốn cập nhật sự thay đổi code của thành viên khác một cách nhanh chóng
  • Chẳng nhẽ cứ sao chép code vào usb rồi gửi cho nhau như hồi mới vào nghề.

Quá bất tiện và dễ gây sai sót, nhu cầu đó thúc đẩy:

  • Tạo ra công cụ giúp quản lý phiên bản của source code
  • Giúp nhiều người có thể dùng chung một source code mà không bị xung đột với nhau

Và từ đó, Hệ Thống Quản Lý phiên bản (Version Control System – VCS) ra đời. Với GIT là cái tên nổi tiếng nhất mà tất cả các lập trình viên đều sử dụng

Git là gì?

Git là một hệ thống quản lý phiên bản phân tán (Distributed Version Control System – DVCS), nó là một trong những hệ thống quản lý phiên bản phân tán phổ biến nhất hiện nay.

Git cung cấp cho mỗi lập trình viên kho lưu trữ (repository) riêng chứa toàn bộ lịch sử thay đổi.

Version Control System – VCSlà gì?

VCS là viết tắt của Version Control System là hệ thống kiểm soát các phiên bản phân tán mã nguồn mở. Các VCS sẽ lưu trữ tất cả các file trong toàn bộ dự án và ghi lại toàn bộ lịch sử thay đổi của file. Mỗi sự thay đổi được lưu lại sẽ được và thành một version (phiên bản).

VCS nghĩa là hệ thống giúp lập trình viên có thể lưu trữ nhiều phiên bản khác nhau của một mã nguồn được nhân bản (clone) từ một kho chứa mã nguồn (repository), mỗi thay đổi vào mã nguồn trên local sẽ có thể ủy thác (commit) rồi đưa lên server nơi đặt kho chứa chính.

Và một máy tính khác nếu họ có quyền truy cập cũng có thể clone lại mã nguồn từ kho chứa hoặc clone lại một tập hợp các thay đổi mới nhất trên máy tính kia.

Lập trình viên có thể xem lại danh sách các sự thay đổi của file như xem một dòng thời gian của các phiên bản. Mỗi phiên bản bao gồm: nội dung file bị thay đổi, ngày giờ sửa đổi, người thay đổi là ai, lý do thay đổi hay tên phiên bản…

VCS có tác dụng như thế nào?

  • Lưu lại lịch sử các version của bất kỳ thay đổi nào của dự án. Giúp xem lại các sự thay đổi hoặc khôi phục (revert) lại sau này.
  • Việc chia sẻ code trở nên dễ dàng hơn, lập trình viên có thể để public cho bất kỳ ai, hoặc private chỉ cho một số người có thẩm quyền có thể truy cập và lấy code về.

Vốn là một VCS nên Git cũng ghi nhớ lại toàn bộ lịch sử thay đổi của source code trong dự án. Lập trình sửa file, thêm dòng code tại đâu, xóa dòng code ở hàng nào…đều được Git ghi nhận và lưu trữ lại.

Git hoạt động như thế nào?

word image 11040 1

Các thành phần chính trong Git

Staging Area (Khu vực dàn dựng)

Mô tả

Staging Area, còn được gọi là chỉ mục hoặc bộ nhớ đệm, là một không gian trung gian nơi bạn có thể định dạng và xem lại các thay đổi trước khi commit chúng vào kho cục bộ (Local Repository).

Nó hoạt động như một bộ đệm giữa thư mục làm việc (Source code mà các bạn hiển thị trên máy) và kho cục bộ (Local Repository), cho phép bạn chuẩn bị và tổ chức các commit của mình.

Quy trình làm việc:

  • Thêm thay đổi: Sử dụng git add <file> để thêm thay đổi của file, hoặc git add . để thêm tất cả các file thay đổi vào Staging Area
  • Xem các thay đổi đã staged: Sử dụng git status hoặc git diff –staged để xem những thay đổi nào đã được staged.
  • Commit các thay đổi đã staged: Sử dụng git commit -m “commit message” để commit các thay đổi đã staged vào Local Repository.

Lệnh ví dụ

# Staging một tệp cụ thể

git add filename.txt

# Staging tất cả các thay đổi

git add .

# Xem các thay đổi đã staged

git status git diff --staged

Local Repository (Kho cục bộ)

Mô tả

Kho cục bộ (Local Repository) là phiên bản dự án của bạn được lưu trữ trên máy tính của bạn. Nó chứa tất cả các tệp dự án, cùng với toàn bộ lịch sử các thay đổi đã được thực hiện trên các tệp đó.

Mỗi commit trong kho cục bộ đại diện cho một lần thay đổi mã nguồn của dự án (snapshot) tại một thời điểm nhất định.

Mục đích: Để quản lý lịch sử dự án và theo dõi các thay đổi cục bộ.

Cấu trúc: Bao gồm thư mục .git, chứa tất cả các siêu dữ liệu và tệp đối tượng của kho.

Quy trình làm việc:

Commit các thay đổi: Sử dụng git commit để lưu các thay đổi từ khu vực staging vào kho cục bộ.

Xem lịch sử commit: Sử dụng git log để xem lịch sử các commit.

Quản lý nhánh: Sử dụng git branch và git checkout để quản lý các nhánh trong kho cục bộ.

Lệnh ví dụ

# Commit các thay đổi đã staged

git commit -m "Commit message"

# Xem lịch sử commit

git log

# Tạo một nhánh mới

git branch new-branch

# Chuyển sang một nhánh

git checkout new-branch

Remote Repository (Kho từ xa)

Mô tả

Kho từ xa là một phiên bản dự án của bạn được lưu trữ trên internet hoặc một máy chủ bên ngoài. Nó cho phép bạn cộng tác với người khác bằng cách chia sẻ các thay đổi của dự án.

Các kho từ xa có thể được lưu trữ trên các nền tảng như GitHub, GitLab, Bitbucket, v.v.

Mục đích: Để hỗ trợ cộng tác và sao lưu dự án của bạn. Nhiều nhà phát triển có thể push và pull các thay đổi từ kho từ xa.

Các hoạt động phổ biến:

Push các thay đổi: Sử dụng git push để tải các thay đổi từ kho cục bộ lên kho từ xa.

Pull các thay đổi: Sử dụng git pull để lấy và hợp nhất các thay đổi từ kho từ xa vào kho cục bộ.

Clone kho từ xa: Sử dụng git clone để tạo một bản sao cục bộ của kho từ xa.

Lệnh ví dụ

# Thêm một kho từ xa

git remote add origin https://github.com/user/repo.git

# Push các thay đổi lên kho từ xa

git push origin main

# Pull các thay đổi từ kho từ xa

git pull origin main

# Clone một kho từ xa

git clone https://github.com/user/repo.git

Quy trình làm việc trên Git

Đây là tổng quan quá trình chúng ta khởi tạo và làm viêc trên git:

Tạo tài khoản Github, GibLab, Git3…và cài đặt git

Bạn có thể tạo Github account tại đây https://github.com/signup/free

Sau đó cài đặt Git trên máy của bạn: Git – Downloads (git-scm.com)

Cấu hình Github client để làm việc với máy chủ Github

Cấu hình Github client được hướng dẫn cụ thể trên Github, mình xin tóm lược một số bước chính:

Tạo SSH key: https://github.com/centic9/generate-and-send-ssh-key

Cài đặt thông tin cá nhân:

git config --g user.name “Tên của bạn”

git config --g user.email “Địa chỉ email của bạn”

Khởi tạo Local Repository và kết nối với Remote Repo trên Github

Trong quá trình làm việc có 2 trường hợp chúng ta làm việc với Git:

  • Bạn chủ động tạo dự án mới
  • Bạn join vào một dự án có sẵn (thông thường đi làm chúng ta sẽ tiếp cận tới trường hợp này)

Trường hợp bạn chủ động tạo dự án mới:

Bật Terminal tại thư mục cần tạo dự án. Nhấn chuột phải chọn Git Bash here

Khởi tạo Local repository:

#khởi tạo một Local repo trên máy

git init

#Thêm các tệp có sẵn vào Local repo

git add .

#Commit các thay đổi ban đầu và đưa dữ liệu vào Local Repo

git commit -m "Initial commit"

Tạo Remote Repository trên GitHub

Trên trang Github chúng ta chọn Create Repository

Đặt tên Repo

Chọn kiểu private hoặc public

Chọn add Readme.md (đây là file mô tả dự án của bạn)

Hoặc nếu các bạn chưa thành thao Git thì bỏ chọn phần này, sau đó nhân OK. Github sẽ recommend những câu lệnh cần sử dụng để các bạn kết nối tới Remote Repo đó.

Trên Terminal gõ lệnh

git remote add origin [email protected]:(Tên repo)

Vậy là các bạn đã khởi tạo và kết nối thành công lên Repo của Github

Trường hợp các bạn join vào dự án khác

Với trường hợp này, các bạn cần người có quyền admin add tài khoản vào dự án đó.

Sau đó chúng ta clone dự án về máy của mình bằng lệnh

git clone https://github.com/user/repo.git

Thực hiện thay đổi source code

Vậy là giờ bạn đã có Source code của dự án, việc của chúng ta bây giờ là code và code để phát triển.

Thông thường chúng ta sẽ tạo và làm việc tại nhánh develop (nhánh mặc định là master hoặc main), khi phát triển một feature mới, chúng ta tạo ra một branch (nhánh) mới cho dự án. Sau khi dev xong, chúng ta thực hiện đẩy dữ liệu lên và chờ được review bởi các Dev khác.

Quy trình như sau:

  • Thực hiện phát triển hoặc sửa code
  • Thêm các thay đổi vào Staging Area sử dụng git add
  • Kiểm tra lại các thay đổi bằng git status

Đẩy code lên Local Repo và Remote Repo

Sau khi code đã nằm trong Stagin Area, chúng ta tiến hành commit để lưu lại thông tin: thay đổi vì mục đích gì, chức năng nào… Mỗi dự án sẽ có Rule commit khác nhau

  • Commit những thay đổi trước khi push: git commit -a -m “Thông tin về commit”

Tạo nhánh (branch) riêng:

  • Xem toàn bộ các nhánh đang có git branch -a
  • Tạo nhánh mới git branch <tên mới>
  • Chuyển nhánh git checkout <tên nhánh>
  • Xóa nhánh git branch -d <Tên branch>
  • Nhập nhánh con vào nhánh hiện tại git merge <Tên nhánh>

Đẩy code lên Remote Repo với nhánh riêng cho chức năng đó

git push -u origin main

Với main là branch hiện tại, các bạn sử dụng tên nhánh khác như develop, feature để push vào các nhánh khác.

Cuối cùng là chờ review và approved của Senior hoặc FO, FA của dự án

Lấy code của người khác từ Remote Repo về máy

Trường hợp các bạn cần lấy code của người khác về máy, để phát triển tiếp chúng ta sử dụng lệnh:

git pull origin <branch>

Khi sảy ra xung đột, các bạn có thể dùng các lệnh sau để xử lý:

#Hủy bỏ các thay đổi trong thư mục làm việc:

git checkout -- filename.txt

#Gỡ bỏ các thay đổi đã staged:

git reset filename.txt

#Khôi phục kho về một commit trước đó:

git reset --hard commit-id

Hợp nhất code về một nhánh

Khi đã dự án đã phát triển xong các chức năng và test thành công, chúng ta cần hợp nhất các chức năng đó lại về nhánh chính (develop), thao tác đó là merge:

git merge <Tên nhánh>

Sau đó, nếu có xung đột xảy ra chúng ta sẽ xử lý các xung đột đó.

Các lệnh git thường dùng

Git version

git --v

Kiểm tra phiên bản của Git.

Git config

git config --g user.name "Dev name"

git config --g user.email "Dev email"

git config --list

Định cấu hình các biến cấu hình chung – Nếu bạn đang làm việc với các developer khác, bạn sẽ cần biết ai đang kiểm tra mã xuất nhập và thực hiện thay đổi.

Git help

Nếu bạn cần hỗ trợ, hãy sử dụng các lệnh:

git help -a or $ git help --all – Hướng dẫn bạn có thể làm được những gì, tất cả các lệnh có thể.

git config --help hoặcgit help config – Đưa bạn tới trang hướng dẫn chính thống của Git.

git command -help . Xem tất cả các tùy chọn có sẵn cho lệnh cụ thể

Git mkdir

git mkdir folder_name  – Tạo repository trong hệ thống local.

cd folder_name – Di chuyển đến folder_name repository vừa tạo ra.

Git remote

git remote add origin https... <url> – Liên kết đến remote repository (local & GitHub)

git remote set-url <name> <new url> – Thay đổi địa chỉ của remote repository đã Liên kết vào địa chỉ của <new url>.

git remote rename <old> <new> – Thay đổi tên của remote repository đã Liên kết.

Git init

git init (Khởi tạo git trong thư mục dự án của bạn) – Lệnh này được dùng khi bạn muốn tạo một phiên bản git mới cho một dự án.

Git status

Câu lệnh Git status dùng để kiểm tra status của repository.

git status 

git status --short

Giải thích:

  • ?? – Tập tin không bị theo dõi
  • A – Tệp được thêm vào giai đoạn
  • M – Tệp đã sửa đổi
  • D – Các tệp đã xóa

Git add

Add những thay đổi (bạn đã tạo mới hoặc chỉnh sửa) để thực hiện commit.

git add . (Chú ý dấu chấm)

Hoặc:

git add --all  (git add -A)

git add index.html (có thể chỉ định trực tiếp tên tệp cần add)

Git commit

Git commit: Ghi lại các thay đổi vào kho lưu trữ. (Cần thêm các thông điệp rõ ràng vào mỗi mục commit)

Cách đặt tên branch hay commit nên rõ ràng, thể hiện branch đó, commit đó thực hiện feature gì hay là fix bug gì… (thường thì sẽ theo quy định của công ty)

git commit -m "Thông điệp của bạn"

Git diff

git diff So sánh sự khác biệt kể từ lần commit cuối cùng của bạn.

git log Xem lịch sử làm việc với git (lịch sử commit)

Git push

git push -u origin branch_mane – Push (đẩy) branch vào remote repository.

git push – Push (đẩy) tất cả mọi thay đổi (đã commit) lên remote repository.

git push -d origin branch_mane – Xóa một branch trên remote repository.

git push -f origin branch_mane – Push force sẽ apply toàn bộ log ở local của bạn lên branch ở repo, bất chấp log 2 nơi khác nhau. (Xóa vĩnh viễn branch cũ Push branch mới. Dễ gây conflict cho người khác cẩn trọng trước khi dùng)

Git branch

git branch -M branch_mane (main) – Đổi tên nhánh chính.

git branch – Kiểm tra các nhánh hiện có của bạn ở local.

git branch -c branch_mane hoặc git checkout -b branch_mane (Tạo và chuyển luôn sang nhánh mới) – Tạo một nhánh có tên “branch_mane” và hợp nhất (merge) nó với nhánh chính.

git branch -d branch_mane – Xóa một nhánh tại local có tên: “branch_mane” (branch đã được hợp nhất (push) vào remote repository)

git branch -D branch_mane – Xóa một nhánh tại local có tên: “branch_mane” (branch đã commit nhưng chưa hợp nhất vào remote repository)

git branch -a – Kiểm tra các branch hiện có trên remote repo của bạn.

Git checkout

git checkout -b branch_mane (Tạo và chuyển luôn sang nhánh mới)

git checkout branch_mane – Lệnh trên giúp di chuyển không gian làm việc, kiểm tra tệp giữa các branch_mane.

Git fetch (Lấy code về nhưng chưa muốn merge)

git fetch origin

  • Git fetch cho phép CẬP NHẬT để xem điều gì đã thay đổi trên GitHub của bạn.
  • Lệnh fetch (xác nhận nội dung thay đổi trong branch của remote repository) nhưng nội dung branch của local repository không bị thay đổi.

Git merge (merge kết hợp nhánh hiện tại, với một nhánh được chỉ định.)

Di chuyển về branch cần hợp nhất bằng lệnh checkout.

git checkout branch_mane1 (Nhánh nhận hợp nhất or nhánh hiện tại)

Tiến hành hợp nhất:

git merge branch_mane2 (Nhánh chỉ định hợp nhất)

(Nhánh hiện tại là nhánh bạn đang đứng, nhánh chỉ định là nhánh sau lệnh $ git merge)

Lệnh trên giúp hợp nhất các branch (Hợp nhất branch_mane2 vào branch_mane1). (Chú ý xử lý xung đột code)

Git pull (Hợp nhất từ xa)

git pull origin main – Git pull kéo tất cả các thay đổi từ main về local.

git pull – Git pull kéo tất cả các thay đổi từ branch_mane về local.

git pull origin – Git pull kéo tất cả các thay đổi từ kho lưu trữ từ xa vào branch bạn đang làm việc. (pull là sự kết hợp của 2 lệnh khác nhau: fetch và merge)

git pull --rebase (Cach pull chống xung đột)

Git clone

git clone <url>  (Địa chỉ dự án bạn muốn Clone) – Clone dự án có sẵn trên GitHub.

git clone <url> folder_name – Clone đồng thời đổi tên dự án theo ý bạn khi save vào local.

Git stash

git stash save Hoặc git stash – Lưu lại công việc đang làm ở branch này để chuyển sang branch khác (Khi bạn chưa muốn commit code)

git stash list – Xem lại lịch sử thay đổi.

git stash show stash@{n} – Xem lại lịch sử thay đổi cụ thể của lần stash save{n}.

git stash apply stash@{1} – Apply thay đổi của lần stash save{n}.

git stash clear – Xoá toàn bộ stash.

Git rebase (Hợp nhất code)

Di chuyển về nhánh nhận sự hợp nhất.

git checkout branch_mane1

Tiến hành hợp nhất.

git rebase branch_mane2 (Code từ branch_mane2 được hợp nhất vào branch_mane1)

Tương đồng với merge nhưng có sự khác biệt như sau:

  • Merge: Chỉ lấy nội dung commit cuối cùng của hai nhánh, tích hợp tạo thành commit mới. Các commit trước đó được giữ nguyên không thay đổi.
  • Rebase: Lấy code từ branch_mane2, từ những commit ở branch_mane2 tích hợp đồng thời tái tạo lại commit mới ở branch_mane1 (Các commit đã tồn tại bị bỏ đi).

Git revert

git revert <commit_id>Lệnh này tạo commit đảo ngược commit có commit_id được chọn.

git reset –hard <commit_id> – Lệnh này xoá toàn bộ các commit trước đó, đưa branch về trạng thái của commit_id được chọn.

git reset –soft <commit_id> – Đưa branch về trạng thái của commit_id được chọn. Giữ nguyên tất cả thay đổi của file và các thay đổi ở stage. (Được khuyến khích sử dụng)

Note:

  • Nhấn phím mũi tên chỉ xuống để đọc tiếp nội dung bị che khuất phía dưới.
  • Nhấn phím chữ ‘q’ để thoát khỏi chế độ xem, đưa bạn về dấu nhắc lệnh branch hiện tại.

Kết

Git là một công cụ mạnh mẽ để quản lý phiên bản code. Hiện nay hầu hết tất cả các công ty đều sử dụng Git để quản lý source code của mình. Vậy nên nắm rõ Git và cách làm việc của Git sẽ giúp bạn dễ dàng vượt qua vòng phỏng vấn và join vào dự án hơn.

 

5/5 - (1 bình chọn)

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *