Post

Git

Tìm hiểu về Git và cách sử dụng Git cơ bản nhất

Bài viết dựa trên sự tìm hiểu và học hỏi của mình, nếu có sai sót hãy inbox trực tiếp mình để mình fix nhé !

Mình cũng sẽ để link các nguồn mình đã tìm hiểu và học hỏi trong quá trình học cũng như trong quá trình mình viết bài này bên dưới cuối bài blog.

Source Control / Version Control là gì

Trước khi tìm hiểu Git là gì thì phải nói qua 2 cái hệ thống này trước đã

  • Hệ thống giúp lưu trữ mọi thay đổi của source code

  • Hỗ trợ nhiều người làm việc cùng lúc

  • Xem đứa nào thay đổi code (Rất tiện khi cần tìm thằng đổ tội)

  • Revert các thay đổi, đưa code về version cũ hơn, không lo mất code

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.

Git ra đời vào năm 2005, được tạo bởi người sáng lập Linux Kernel - Linus Torvalds. Sau đó, nó được vận hành hiệu quả bởi Junio Hamano, một lập trình viên người Nhật.

Git được phát triển để thay thế BitKeeper, hệ thống quản lý phiên bản trước đó mà cộng đồng phát triển Linux kernel đã sử dụng. Do mâu thuẫn với nhà cung cấp BitKeeper, cộng đồng Linux cần một hệ thống quản lý phiên bản mới, mạnh mẽ và linh hoạt hơn.

Mục đích chính của Git là giúp đội ngũ phát triển làm việc cùng nhau trên cùng một dự án mà không gặp khó khăn về việc ghi đè lên công việc của nhau. Nó cho phép mọi người làm việc trên các phiên bản riêng của mã nguồn và sau đó hợp nhất các thay đổi này thành phiên bản chính thức, được gọi là “nhánh chính” (thường được gọi là “master” hoặc “main”).

Các bạn có thể tìm hiểu sâu hơn về Git ở đây Introduction Git

Phân biệt giữa Git và Git Server

Có khá nhiều bạn (trong đó có cả mình =)))) khi mới tiếp xúc thì cứ tưởng git với github là một nhưng thật ra 2 cái đó là khái niệm khác nhau =)))

Máy chủ Git, hay còn gọi là Git server, là một máy chủ mà trên đó đã được cài đặt dịch vụ Git. Chức năng chính của máy chủ này là lưu trữ và quản lý mã nguồn từ các dự án khác nhau. Khi nhà phát triển làm việc trên dự án, họ có thể tương tác với máy chủ Git để tải lên, tải xuống và thực hiện các thao tác quản lý phiên bản trên mã nguồn. Máy chủ Git đóng vai trò quan trọng trong việc duy trì tích hợp và quản lý sự phát triển của dự án.

Ví dụ: Github đóng vai trò như một máy chủ Git. Bạn có thể tạo một kho chứa (repository) trên Github, gọi là kho chứa từ xa (remote repository). Sau đó, bạn có thể sao chép (clone) kho chứa từ xa này về máy tính của mình để tạo thành kho chứa cục bộ (local repository).

Một số git server phố biến hiện nay như: Github, Gitlab, Azure DevOps Services, Bitbucket,…

Tóm lại dễ hiểu thì :

  • Git là một hệ thống quản lý phiên bản phân tán, dùng các câu lệnh để theo dõi, quản lý thay đổi trong mã nguồn cục bộ.

  • Github là máy chủ lưu trữ và quản lý kho Git, cung cấp truy cập mạng, lưu trữ kho Git, cung cấp dịch vụ truy cập và hợp tác

Các lệnh git cơ bản

Bên dưới là các lệnh thường sài trong git.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
git init 
git add <file_name>
git add .
git status
git commit -m"add your commit"
git log
git remote add origin https://github.com/<your_repository>.git
git push origin <name_branch> // usually is main
git branch <name_branch>
git checkout <name_branch>
git checkout -b <name_branch>
git pull
git merge
git branch -d tên-nhánh
git clone URL

Mô hình minh họa trạng thái của Git

Khu vực đầu tiên gọi là Working Copy

  • Đại khái đây là nơi bạn làm việc với các thư mục hoặc là clone code, pull code từ trên remote về.

Khu vực trung gian gọi là Staging Area

  • Staging Area là khu vực lưu trữ những thay đổi trên tập tin so sánh giữa repo chính và repo clone trước commit

  • Khi commit tập tin thì tập tin đó phải nằm trong Staging Area. Một tập tin khi nằm trong Staging Area sẽ có trạng thái là Stagged

Khu vực cuối cùng gọi là Local Repository

  • Sau khi bạn commit xong, đây là nơi mà các file cũng như các commit chờ được push lên để đồng bộ trên remote repository.

Remote Repository: Đặt trên máy chủ Git (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. Bạn có thể sao chép (clone) Remote Repository về tạo thành Local Repository. Khi có sửa đổi ở Local Repository, bạn có thể đẩy (push) mã lên Remote Repository.

Trạng thái chỉ thị Commit

Git có hai loại trạng thái chính:

Tracked

Là tập tin đã được đánh dấu theo dõi trong Git. Trạng thái Tracked sẽ có thêm các trạng thái:

  • Unmodified (chưa chỉnh sửa gì)

  • Modified (đã chỉnh sửa)

  • Staged (đã sẵn sàng để commit).

  • Untracked – Là tập tin không muốn làm việc với nó trong Git.

Untracked

  • Xuất hiện khi tạo mới hoặc thêm vào một tập tin mới vào trong thư mục repo đang làm việc. Nó sẽ ở trạng thái Untracked.

Sử dụng Git

Cài đặt Git

Các bạn có thể cài từ trang chủ của Git dựa vào hệ điều hành máy tương ứng nhé

Link Tải Git

Sau khi cài xong, vào terminal và chạy 2 dòng lệnh sau

1
2
git config --global user.name "Tên của bạn"
git config --global user.email "email@example.com"

Tạo một Repository trên Github

Ở đây mình sẽ sử dụng Git Server là Github nhé, ngoài ra thì vẫn còn rất nhiều nền tảng git server khác như gitlab hay Azure DevOps Services,…

  • Đầu tiên các bạn tạo một tài khoản github từ trang chủ của Github

  • Sau khi tạo xong, chọn vào phần “Repository” sau đó chọn “New”

  • Rồi gõ vào ô “Repository Name” để tạo tên của Repository sau đó ấn “Create Repository” là được

Git init

Khởi tạo 1 kho lưu trữ (Repository) trên máy của bạn, ở đây mình sẽ hướng dẫn trên Terminal của VSCode nhé.

Đầu tiên, các bạn mở thư mục chứa dự án mình cần quản lý trên VSCode, sau đó gõ vào terminal

1
git init

Lệnh này sẽ tạo một thư mục mới có tên .git, thư mục này chứa tất cả các tập tin cần thiết cho kho chứa - đó chính là bộ khung/xương của kho chứa Git. (Thường thì thư mục này sẽ bị ẩn đi)

Folder .git

Không nên động vào thư mục .git

Sau khi khởi tạo kho lưu trữ trong folder bạn chọn, nếu bạn sử dụng VSCode như mình thì khi nhìn qua folder bạn sẽ thấy các file trong folder có màu xanh lá và chữ U như sau

File chưa Push

Git status

Để kiểm tra trạng thái các file, các bạn gõ vào terminal câu lệnh

1
git status

Sau khi gõ xong nó sẽ hiển thị như hình

Git Status

Nó nói ràng : trên nhánh main (On branch main) thì đang có 4 file chưa được add cũng như commit (cũng hiển thị luôn đó là 4 file nào)

Và công việc tiếp theo của chúng ta chính là add file lên

Git add

Có 2 cách để add file với git

1.Add từng file / chọn file

1
git add <file_name>

Đây là cách add từng file có trong folder. Ví dụ, bạn muốn add file tên nhap.cpp và test.cpp thì

1
2
git add nhap.cpp
git add test.cpp

2.Add tất cả file trong thư mục

Để add toàn bộ file trong thư mục đang quản lý, ta dùng lệnh

1
git add .

Khi sử dụng lệnh git add thành công, bạn đã đưa file vào khu vực “Staging Area”

Git commit

Sau khi add file xong, việc tiếp theo cần làm là ta commit code. Dễ hiểu là bạn sẽ ghi lại thông tin của cái file đó (kiểu là mình update gì trong file đó, hay là add file này,…)

Commit là chỉ thị trên Git, lưu lại bản chụp (snapshot) các sự thay đổi trong thư mục làm việc, và các tập tin và thư mục được thay đổi đã phải nằm trong Staging Area.

Mỗi commit sẽ được lưu lại lịch sử chỉnh sửa của mã nguồn kèm theo tên và địa chỉ email của người commit.

Ngoài ra Git cho phép khôi phục lại tập tin trong lịch sử commit, cho phép phân nhánh (branch).

1
git commit -m"add your messages"

Thay dòng chữ {add your messages} đi là được

Git log

Để kiểm tra lịch sử commit, ta dùng lệnh

Ta dùng lệnh

1
git log

Các bạn có thể thấy là nó hiển thị toàn bộ các commit trước đó bao gồm tên người commit, ngày giờ và cũng như nội dung.

Git remote add origin

Đồng bộ code từ máy Local lên Github

1
git remote add origin https://github.com/<user_name_github>/<name_of_repository>.git

Bên trên chính là lệnh đồng bộ code từ máy local lên remote.

Phần URL chính là link github + username github của bạn + tên repo bạn tạo + .git

Ví dụ như của mình thì sẽ là

1
git remote add origin https://github.com/cuogne/Testgit.git

Sau khi bạn thực hiện lệnh này thì ở những lần push sau trong folder này, bạn sẽ không cần lặp lại lệnh này nữa.

Git push

Đây là bước cuối cùng, đưa code từ local repo lên remote repo, ở đây server chính là github

1
git push origin <name of branch>

Lệnh này sẽ push code từ máy bạn lên repo bạn tạo trong github.

Name of branch tức là tên mà nhánh bạn đang làm việc (phần này mình sẽ nói bên dưới)

Ngày xưa thì nó là master nhma giờ thì đa số đổi thành main hết rồi

1
git push origin main

Sau khi thực hiện xong, đợi một chút để code được push lên

Sau đó lên repo của bạn trên github và reload lại ta sẽ có thành quả.

Hmm, tới đây các bạn đã có thể push code lên, gửi cho mọi người xem cũng như có một nơi để lưu trữ code rồi.

Bên trên chỉ là những lệnh cơ bản nhất. Từ bên dưới, chúng ta sẽ tìm hiểu cách làm việc trên các repo này, cách merge code cũng như cách tạo nhánh để có thể làm việc trên nhiều nhánh khác nhau

Git branch

Branch là một phần của repository, tương đương với khu vực làm việc độc lập. Khi tạo repository, một nhánh chính (master/main) sẽ được tạo sẵn. Nhánh này có thể chia thành nhiều nhánh con. Những thay đổi trên nhánh con không ảnh hưởng đến nhánh chính, cho phép làm nhiều sửa đổi trên cùng một kho chứa. Ta cũng có thể kết hợp (merge) các nhánh lại với nhau.

Trong quá trình làm việc với Git, bạn có thể tạo nhiều nhánh (branch) khác nhau để phát triển tính năng, sửa lỗi hoặc thử nghiệm mà không ảnh hưởng tới nhánh chính

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

1
git branch {name_branch}

với name_branch là tên nhánh mà bạn muốn đặt

Giả sử ở đây mình đặt tên nhánh là demo nha

Để kiểm tra xem bạn đang ở branch nào thì chỉ cần

1
git branch

Đây là mình đang ở nhánh main, và nhánh còn lại là nhánh demo mình vừa tạo

Để chuyển qua nhánh còn lại thì :

1
git checkout demo

Sau đó, bạn có thể tạo file cũng như làm việc trên nhánh này mà không ảnh hưởng tới nhánh chính (main).

Nếu bạn push code lên repo thì cũng sẽ tạo thành 2 nhánh như hình bên dưới và bạn cũng sẽ thấy sự khác biệt

Nhánh main

Nhánh demo

Vậy thì giờ làm cách nào để gộp các nhánh đó vào nhánh chính ?

Git merge

Đây là hành động ghép code lại với nhau từ nhánh phụ vào nhánh chính

Ảnh minh họa nhánh và gộp nhánh

Trước hết, bạn phải quay về nhánh chính (main)

1
git checkout main

Sau đó điền vào nhánh muốn gộp

1
git merge demo

Bạn sẽ thấy nhánh demo đã được gộp thành công vào nhánh main

Nếu bạn đã hoàn thành, có thể xóa nhánh main trên local đi bằng cách

1
git branch -d [branch_name]

Lưu ý : để xóa nhánh thì bạn phải ở một nhánh khác, không được ở nhánh đang xóa

Sau đó xóa nhánh trên remote

1
git push origin --delete demo

Xong rồi đó, giờ bạn có thể push lên lại nhánh main và tiếp tục thoi

Git pull

Đây là lệnh sẽ giúp bạn đồng bộ code từ repo trên remote về máy local của bạn

1
git pull

Nếu bạn không đồng bộ, trong lúc làm việc nhóm sẽ xảy ra xung đột giữa các file.

Git clone

Bạn có thể clone dự án của một người khác trên github bằng cách sử dụng lệnh

1
git clone URL

Khi bạn chạy lệnh git clone, Git sẽ tạo một bản sao của repository đó trên máy tính của bạn, bao gồm tất cả các file, lịch sử commit, nhánh, và cài đặt cấu hình.

Các tài liệu tham khảo

Hmm nhiu đây chắc là đủ để sài rồi đó =))) Chúc mấy bạn sài git dui dẻ ;-;

Có thể ghé qua các tài liệu này để xem thêm nha, mình cũng có đọc qua một số và chỉ học những cái cơ bản nhất, các bạn có thể vào và tìm hiểu sâu hơn về git nhé.

Từ gà tới pro Git và Github trong 20 phút - Tự học Git siêu tốc

Documentation Git

Learn Git

Bắt đầu dùng GIT – Sử Dụng Git cơ bản

Git là gì? Tổng quan về Git cơ bản cho lập trình viên


Cừn

This post is licensed under CC BY 4.0 by the author.