Skip to content

Instantly share code, notes, and snippets.

@hoangnguyennn
Last active July 19, 2024 02:02
Show Gist options
  • Save hoangnguyennn/fcefc26a02d209d83f874e2a6bc0082a to your computer and use it in GitHub Desktop.
Save hoangnguyennn/fcefc26a02d209d83f874e2a6bc0082a to your computer and use it in GitHub Desktop.
hoangnguyennn's git syntax collection

Cú pháp git

Chú ý: đây chỉ là các lệnh git và tham số của nó mà mình biết, không phải tất cả lệnh cũng như là tất cả tham số của nó

  • git init: dùng để tạo một git project rỗng hoặc tạo lại từ một git project đã có sẵn
  • git status: dùng để hiển thị status của working directory
  • git add: dùng để thêm nội dung từ working directory vào staging area
  # thêm một file
  $ git add <tên-file>

  # thêm toàn bộ file trong working directory
  $ git add .
  • git commit: dùng để đưa nội dung từ staging area (đã dùng git add) sang local repo
  $ git commit -m <nội-dung-commit>
  • git log: dùng để hiển thị lịch sử commit
  • git show: dùng để hiển thị thay đổi của một commit
  $ git show <commit-id>
  • git diff: dùng để hiển thị sự thay đổi giữa các commit, giữa commit với working directory, ...
  # xem thay đổi giữa commit và working directory của toàn bộ file
  $ git diff

  # hoặc của một file cụ thể
  $ git diff <tên-file>
  • git restore: dùng để restore lại code
  # hủy bỏ code chưa commit trong working directory
  $ git restore <tên-file>
  $ git restore .

  # đưa code từ staging area sang working directory
  $ git restore --staged <tên-file>
  $ git restore --staged .
  • git reset: dùng để đưa HEAD về 1 commit cụ thể
  # đưa HEAD về 1 commit nào đó, các commit phía sau đưa về staging area
  $ git reset --soft <commit-id>

  # đưa HEAD về 1 commit nào đó, các commit phía sau đưa về working directory
  $ git reset --mixed <commit-id>

  # đưa HEAD về 1 commit nào đó, các commit phía sau sẽ bị xóa (không khuyến khích)
  $ git reset --hard <commit-id>
  • git rm: dùng để xóa file trong local repo hoặc staging area
  $ git rm <tên-file>
  • git branch: dùng để quản lý branch (xem danh sách, tạo, xóa)
  # xem danh sách branch
  $ git branch

  # hoặc xem danh sách bao gồm remote
  $ git branch --all

  # tạo một branch mới
  $ git branch <tên-branch>

  # xóa branch đã có (không thể xóa branch hiện tại)
  $ git branch <tên-branch> -d
  • git checkout: dùng để di chuyên qua lại giữa các branch hoặc restore lại code
  # di chuyển sang một branch đã có
  $ git checkout <tên-branch>

  # tạo branch nếu chưa có và di chuyển sang branch đó
  $ git checkout -b <tên-branch>
  • git merge: dùng để ghép 2 hoặc nhiều branch lại với nhau
  # ghép 1 nhánh vào nhánh hiện tại
  $ git merge <tên-branch>
  • git clone: dùng để clone git repo về local
  $ git clone <remote-repo-url>
  • git fetch: dùng để cập nhật thay đổi từ remote repo
  # cập nhật thay đổi từ tất cả các nhánh trên remote
  $ git fetch --all

  # hoặc cập nhật 1 nhánh cụ thể
  $ git fetch <tên-repo> <tên-nhánh-nguồn>:<tên-nhánh-đích>
  • git pull: dùng để cập nhật thay đổi từ remote repo
  # pull về từ origin repo
  $ git pull origin <tên-nhánh>

  # hoặc (lấy repo và nhánh của lần pull trước)
  $ git pull

  # git pull = git fetch + git merge
  # fetch: lấy thông tin thay đổi từ remote ghi vào thư mục .git
  # merge: ghép code từ nhánh này vào nhánh kia
  • git push: dùng để đưa code từ local repo lên remote
  # push lên origin repo
  $ git push origin <tên-branch>
  • git clean: dùng để xóa untracked files trong working directory
  # xóa tất cả file đang ở trạng thái untracked
  $ git clean

  # hoặc xóa file, folder cụ thể
  $ git clean <đường-dẫn-file-hoặc-folder>

  # xóa tất cả file đang ở trạng thái untracked
  # nếu biến `clean.requireForce` = true (mặc định), file sẽ không được xóa
  # nên ta thêm -f (force) để xóa
  $ git clean -f

  # xóa tất cả file và folder ở trạng thái untracked
  # mặc định, việc xóa file sẽ không thực hiện theo dạng đệ quy để tránh việc xóa quá nhiều
  # nghĩa là file nằm trong thư mục sẽ không bị xóa
  # nên ta thêm -d để xóa tất cả file và folder chứ nó
  $ git clean -fd
  • git rebase: sửa đổi commit
  # mở phiên rebase
  $ git rebase <tên-branch-muốn-rebase>

  # hủy phiên rebase hiện tại
  $ git rebase --abort

  # di chuyển sang commit tiếp theo
  $ git rebase --continue

  # nếu commit hiện tại, sau khi sửa đổi không có thay đổi thì dùng --skip để chuyển sang commit tiếp theo
  $ git rebase --skip
  • git remote: thao tác với remote repo
  # add remote repo vào local repo với alias là `origin`
  $ git remote add origin <repo-link>

  # loại bỏ các remote branch đã bị xóa ở `origin`
  $ git remote prune origin

Giải quyết conflict code

Cách 1: Dùng rebase

  1. git pull (cập nhật code từ remote repo)
  2. git checkout <tên-branch> (chuyển sang branch cần sửa)
  3. git rebase <tên-branch> (so sánh code trong branch hiện tại với <tên-branch>)
  4. chỉnh sửa code bị conflict
  5. git add <tên-file-đã-resolve-conflict>
  6. git rebase --continue

Cách 2: Dùng merge

  1. git pull
  2. git checkout <tên-nhánh> (chuyển sang branch cần sửa)
  3. git merge <tên-branch> (ghép branch vào branch hiện tại)
  4. chỉnh sửa code
  5. git push (push lại lên remote)

Đổi message của một commit

Sau khi đổi message của commit, id commit sẽ được tạo mới.

Vì vậy nếu đã push nhánh này lên remote thì ta phải thêm -f khi push lại

Đối với commit cuối cùng

    $ git commit --amend -m <nội-dung-commit-mới>

Đối với commit khác

  1. git rebase -i <id-của-commit-trước-gần-nhất>
  2. đổi pick thành edit của commit cần sửa
  3. nhấn Ctrl + S để lưu lại, sau đó nhấn Ctrl + X để thoát
  4. git commit --amend -m <nội-dung-commit-mới>
  5. git rebase --continue

Cherry-pick: copy commit từ nhánh khác

  1. git log ở nhánh lấy commit để xem id của commit cần lấy
  2. git checkout <tên-nhánh> để di chuyển sang nhánh nhận commit
    # copy commit vào nhánh hiện tại theo id của commit
    $ git cherry-pick <commit-id>

    # copy commit vào nhánh hiện tại theo id của commit
    # nhiều commit riêng lẻ
    $ git cherry-pick <commit-id-a> <commit-id-b>

    # copy commit liên tiếp nhau từ `commit a` tới `commit b`
    # không lấy commit b
    $ git cherry-pick <commit-id-a>...<commit-id-b>

    # copy commit liên tiếp nhau từ `commit a` tới `commit b`
    # có lấy commit b
    $ git cherry-pick <commit-id-a>^..<commit-id-b>

Xóa nhánh trên remote

  $ git push <tên-repo> --delete <tên-branch>

  # ví dụ
  # git push origin --delete feature/1

Gộp 1 nhánh vào nhánh khác ở local có squash

  # lệnh merge 1 nhánh vào nhánh hiện tại
  $ git merge --squash <tên-nhánh>

  # git sẽ không merge liền mà chỉ đưa code từ nhánh kia sang
  # chạy lệnh sau để commit
  $ git commit 

Các khu vực trong git

  • working directory: thư mục hiện tại của repo
  • staging area: sau khi dùng git add, code từ working directory sẽ chuyển sang staging area
  • local repo: sau khi dùng git commit, code từ staging area sẽ chuyển sang local repo
  • remote repo: sau khi dùng git push, code sẽ được đẩy lên remote repo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment