Skip to content

Hướng dân sử dụng cơ bản Git GitHub

VirtueSky edited this page Nov 25, 2024 · 20 revisions

63a5a57f67422

Đầu tiên: Để có kho chứa GitHub bạn cần tạo tài khoản GitHub

1. Tạo repository trên GitHub

  • Đăng nhập vào GitHub sau khi bạn đã có tài khoản
  • Một số tùy chọn để tạo một repository (repo) mới trên GitHub Screenshot 2024-11-25 104732
  • Nhập thông tin về repo như repository name, public or private repo này, ... Cuối cùng là bấm Create repository để tạo

Screenshot 2024-11-25 105014

2. Kết nối repository với local

Sau khi mình đã tạo xong repo mới, lúc này repo hoàn toàn trống rỗng

Screenshot 2024-11-25 105457

Để kết nối repo trên GitHub (remote) với thư mục dự án tại máy tính của bạn (local) có thể làm theo các cách sau

Cách 1:

Clone trực tiếp repo vừa tạo về máy

  • Mở terminal tại thư mục dự bạn muốn đặt dự án và chạy lệnh
git clone <url>

Lúc này bạn đã clone repo trên GitHub về máy tính của bạn.

Cách 2:

  • Nếu bạn đã có thử mục dự án, tại thư mục này mở terminal và chạy lệnh
git init

Bây giờ tại thư mục dự án sẽ xuất hiện một file .git (hiểu đơn giản là file này dùng để liên kết giữa remote và local, nên nếu xóa thì sẽ mất liên kết)

  • Kết nối remote và local bằng lệnh
git remote add <remote_name> <url>

3. Thao tác bằng một số lệnh cơ bản

1. Kiểm tra phiên bản git

git --version
// or
git --v

2. Định cấu hình

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

3. Kiểm tra trạng thái kho lưu trữ

git status

4. Thêm những thay đổi để thực hiện commit

  • chỉ định tệp cụ thể
git add <file_path>

Ví dụ: Bạn vừa thêm index.html vào dự án thì lệnh sẽ là git add index.html

  • Thêm tất cả những thay đổi
git add .
// or
git add --all

5. Commit (Cam kết)

git commit -m "nội dung commit"

6. Push (đẩy các thay đổi lên remote)

  • Đẩy toàn bộ thay đổi lên remote
git push
  • Đẩy branch vào remote
git push -u origin branch_name
  • Xóa một branch trên remote
git push -d origin branch_mane

7. Xem lịch sử làm việc với git

git log

8. Thao tác với branch (nhánh)

  • Kiểm tra các nhánh hiện có ở local
git branch
  • Kiểm tra các nhánh hiện có trên remote
git branch -a
  • Đổi tên nhánh chính
git branch -M branch_name(main)
  • Tạo và chuyển luôn sang nhánh mới - Tạo một nhánh có tên “branch_name” và hợp nhất (merge) nó với nhánh chính.
git checkout -b branch_name
  • Xóa một nhánh tại local có tên: "branch_name" (branch đã được hợp nhất (push) vào remote repository)
git branch -d branch name
  • Xóa một nhánh tại local có tên: "branch_name" (branch đã commit nhưng chưa hợp nhất vào remote repository)
git branch -D branch_name

9. Checkout

  • Chuyển nhánh
git checkout branch_name

10. Fetch (Lấy code từ remote về local nhưng chưa merge)

git fetch origin

Điều này cho phép Cập Nhật để xem những thay đổi trên GitHub của bạn. Khi thực hiện Fetch thì những nội dung ở local không bị thay đổi gì.

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

  • Trước tiên bạn cần di chuyển về branch cần hợp nhất (ví dụ là branch_name1) (sử dụng lệnh checkout)
git checkout branch_name1
  • Hợp nhất (ví dụ nhánh chỉ định hợp nhất là branch_name2)
git merge branch_name2

Điều này có nghĩa bạn vừa thực hiện hợp nhất nhánh branch_name2 vào nhánh branch_name1

12. Pull (Kéo hết sự thay đổi về local)

  • Kéo tất cả các thay đổi từ branch_name về local
git pull
  • Kéo tất cả các thay đổi từ main về local
git pull origin main
  • Kéo tất cả các thay đổi từ remote vào branch bạn đang làm việc
git pull origin

Lệnh pull là sự kết hợp giữa lệnh fetchmerge

13. Rebase (Hợp nhất thay đổi)

  • Di chuyển về nhánh nhận sự hợp nhất (ví dụ là nhánh branch_name1)
git checkout branch_name1
  • Hợp nhất (ví dụ nhánh chỉ định hợp nhất là branch_name2)
git rebase branch_name2

So sánh giữa MergeRebase

Thuộc tính Merge Rebase
Cách hoạt động Tạo merge commit mới Di chuyển commit lên đầu nhánh mục tiêu
Lịch sử Phân nhánh và có merge commit Gọn gàng, tuyến tính
Dễ theo dõi Dễ thấy quá trình hợp nhất Gọn nhưng khó thấy các nhánh ban đầu
Xung đột Dễ xử lý hơn Có thể khó khăn nếu xung đột nhiều
Khi nào dùng? Khi làm việc nhóm, muốn giữ lịch sử đầy đủ Khi muốn làm sạch lịch sử cá nhân

Tóm lại:

  • 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_name2, từ những commit ở branch_name2 tích hợp đồng thời tái tạo lại commit mới ở branch_name1 (Các commit đã tồn tại bị bỏ đi).

1_5twpqLFgPdqcqrg1wvGKKg

14. Revert

  • Tạo commit đảo ngược commit có commit_id được chọn
git revert <commit_id>
  • 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 -hard <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)
git reset -sort <commit_id>

15. Discard

  • Bỏ thay đổi trong tracked files (file đã được theo dõi bởi Git)
git restore --source=HEAD --staged --worktree .

hoặc

git checkout -- .

Chỉ định một file cụ thể

git restore <file-path>

hoặc

git checkout -- <file_path>

Điều này sẽ khôi phục file về trạng thái cuối cùng trong commit gần nhất (HEAD), tất cả thay đổi trong các file đã sửa sẽ bị loại bỏ.

  • Bỏ staged changes (những file đã được git add)
git restore --staged .

Chỉ định một file cụ thể

git restore --staged <file_path>

Điều này chỉ loại bỏ trạng thái staged, các thay đổi vẫn tồn trại trong working directory.

  • Bỏ toàn bộ thay đổi trong cả staged và working directory
git reset --hard

Điều này sẽ khôi phục repo về trạng thái commit gần nhất (HEAD). Mọi thay đổi trong cả staged và working directory sẽ bị xóa hoàn toàn. Lưu ý: Khi sử dụng git reset --hard sẽ xóa không thể khôi phục những thay đổi chưa được commit, vì vậy hãy cân nhắc kỹ trước khi thực hiện.

  • Bỏ các file untracked (file chưa được add vào Git)
git clean -f

Chỉ định một file cụ thể

git clean -f <file_path>

Điều này sẽ xóa các file chưa được git theo dõi trong working directory. Bạn cũng có các tùy chọn thêm như -d (xóa cả các thư mục untracked) và -n (hiển thị những gì sẽ bị xóa mà không thực sự xóa).

Bảng tổng hợp

Commands Descriptions
git --version
or git --v
Kiểm tra phiên bản git
git config --g user.name "name"
git config --g user.email "email"
Định cấu hình
git status Kiểm tra trạng thái kho lưu trữ
git add <file_path> Thêm tệp thay đổi để thực hiện commit
git add . or git add --add Thêm tất cả những thay đổi để thực hiện commit
git commit -m "nội dung commit" Commit những thay đổi đã thêm
git push Đẩy toàn bộ thay đổi lên remote
git push -u origin branch_name Đẩy branch vào remote
git push -d origin branch_name Xóa một branch trên remote
git log Xem lịch sử làm việc với git
git branch Kiểm tra các nhánh hiện có ở local
git branch -a Kiểm tra các nhánh hiện có trên remote
git branch -M branch_name(main) Đổi tên nhánh chính
git checkout -b branch_name Tạo và chuyển luôn sang nhánh mới - Tạo một nhánh có tên “branch_name” và hợp nhất (merge) nó với nhánh chính.
git branch -d branch name Xóa một nhánh tại local có tên: "branch_name" (branch đã được hợp nhất (push) vào remote repository)
git branch -D branch_name Xóa một nhánh tại local có tên: "branch_name" (branch đã commit nhưng chưa hợp nhất vào remote repository)
git checkout branch_name Chuyển nhánh
git fetch origin Cập Nhật để xem những thay đổi trên GitHub của bạn. Khi thực hiện Fetch thì những nội dung ở local không bị thay đổi gì.
git merge branch_name2 Hợp nhất (ví dụ nhánh chỉ định hợp nhất là branch_name2 với nhánh hiện tại)
git pull Kéo tất cả các thay đổi từ branch_name về local
git pull origin main Kéo tất cả các thay đổi từ main về local
git pull origin Kéo tất cả các thay đổi từ remote vào branch bạn đang làm việc
git rebase branch_name2 Hợp nhất (ví dụ nhánh chỉ định hợp nhất là branch_name2 với nhánh hiện tại)
(Lưu ý: Lấy code từ branch_name2, từ những commit ở branch_name2 tích hợp đồng thời tái tạo lại commit mới ở branch_name1 (Các commit đã tồn tại bị bỏ đi)
git revert <commit_id> Tạo commit đảo ngược commit có commit_id được chọn
git reset -hard <commit_id> 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 -sort <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)
git restore --source=HEAD --staged --worktree .
or git checkout -- .
Bỏ toàn bộ thay đổi trong tracked files (file đã được theo dõi bởi Git)
git restore <file-path>
or git checkout -- <file_path>
Bỏ thay đổi file được chỉ định trong tracked files (file đã được theo dõi bởi Git)
git restore --staged . Bỏ staged changes (những file đã được git add)
git restore --staged <file_path> Bỏ staged changes file được chỉ định (file đã được git add)
git reset --hard Bỏ toàn bộ thay đổi trong cả staged và working directory
git clean -f Bỏ các file untracked (file chưa được add vào Git)
git clean -f <file_path> Bỏ file untracked được chỉ định (file chưa được add vào Git)

4. Một số công cụ hỗ trợ việc sử dụng git thay cho lệnh

  • GitHub Desktop
  • Sourcetree
  • Fork
  • Các IDE cũng đều có tích hợp sẵn git như JetBrain Rider, VisualStudio, VSCode,... Tất cả các công cụ trên đều là những ứng dụng Git GUI để giúp cho người dùng tương tác dễ dàng với Git hơn.