Tổng quan về Git

Hệ thống quản lý phiên bản, tạo ra bởi Linus Torvalds - cha đẻ của Linux.

Các câu lệnh

  • git init : khởi tạo 1 repo mới
  • git clone <repository_url> : tải repo về máy
  • git status : kiểm tra trạng thái hiện tại, hiển thị các file thay đổi / thêm mới / xoá…
  • git add <file_name> : thêm file trước khi commit
  • git add . : thêm tất cả các file
  • git commit -m "Your commit message" : sau khi các file được thêm, dùng lệnh này để lưu các thay đổi vào repo ở máy local trước khi push lên server
  • git push origin main push các thay đổi lên nhánh main trên server
  • git pull origin main update các thay đổi của repo trên server vào repo trên máy local

Câu hỏi thường gặp

  1. Huỷ một commit đã thực hiện khi commit nhầm

Nếu commit chưa được push lên remote: git reset --hard HEAD~1

Nếu commit đã được push lên remote: git revert <commit_hash>

  1. Gộp nhiều commit thành một commit để giữ lịch sử commit sạch sẽ:
git rebase -i HEAD~n

n là số lượng commit muốn gộp

Khi mở trình soạn thảo, bạn sẽ thấy danh sách các commit. Thay đổi từ pick thành squash (hoặc s), và sau đó gộp chúng lại thành một commit.

  1. Làm sao để hủy bỏ các thay đổi đã add nhưng chưa commit?

Để hủy bỏ các thay đổi đã được thêm vào staging area, sử dụng lệnh:

git reset <file_name>

Lệnh này sẽ đưa các file ra khỏi staging area nhưng giữ nguyên thay đổi trong working directory. Nếu bạn muốn hoàn toàn loại bỏ thay đổi, sử dụng:

git checkout -- <file_name>
  1. Làm sao để chuyển sang một branch khác mà không mất các thay đổi chưa commit?

Sử dụng git stash để lưu trữ các thay đổi cục bộ của bạn trước khi chuyển branch

Sau đó, chuyển sang branch khác:git checkout <branch_name>

Khi bạn quay lại branch cũ, sử dụng git stash pop để khôi phục lại các thay đổi:

GitOps - Git flow

git-model@2x.png
  • nhánh chính: develop
  • khi code các feature mới thì checkout từ nhánh develop, test ok thì merge vào develop
  • khi chuẩn bị release, checkout 1 nhánh mới release/v1.0.0 từ develop
  • các bug fix cho lần release sẽ merge vào nhánh release
  • khi test trên nhánh release ok, sẽ merge vào nhánh master và tạo tag, deploy lên production theo các tag này
  • sau khi tạo tag thì nhánh release lại merge vào develop và xoá bỏ nhánh release
  • các feature không deploy trong lần release vẫn checkout từ nhánh develop và merge vào develop như bình thường
  • các hotfix checkout ra từ nhánh master, sau đó merge vào master → tạo tag → deploy production. cuối cùng merge hotfix vào nhánh develop.