menu

Các lệnh git sử dụng nhanh

Đăng lúc 25/09/2017, trong chuyên mục Git và Github

Bài viết tổng hợp và giải thích nhanh các câu lệnh git làm việc với Bitbucket. Không dành cho đối tượng chưa biết gì về git. Tôi sẽ có một bài viết chi tiết giới thiệu về git sau.

Tóm tắt các lệnh sử dụng nhanh

Đây là những lệnh thường dùng (dành cho những ai đã đọc nội dung bài này).

  • Xem trạng thái của repo hiện hành: git status
  • Mở trình quản lý GUI của git: git gui hoặc gitk
  • Clone một repo online: copy đoạn lệnh trên repo đó và chạy.
  • Xem lại log và nhánh ngay trên terminal: git log --oneline --graph --color
  • Sau khi chỉnh sửa một/một số files và muốn đưa vào vùng staged: git add *
  • Chuyển từ vùng staged sang commit: git commit -m "comment cho commit này"
  • Push lên remote: git push origin <tên-nhánh>
  • Tạo nhánh mới nhưng vẫn ở nhánh hiện tại: git branch <tên-nhánh>
  • Tạo nhánh mới và chuyển sang nhánh đó luôn: git checkout -b <tên-nhánh>
  • Chuyển sang nhánh khác: git checkout <tên-nhánh>
  • Xem danh sách các nhánh local: git branch (hiện cả nhánh remote: git branch -a)
  • So sánh hai nhánh: git diff <nhánh-nguồn> <nhánh-cần-so-sánh>
  • Xóa nhánh local: git branch -d <tên nhánh> (xóa nhánh remote: git push origin :<tên-nhánh>)
  • Thêm description cho nhánh: git branch --edit-description
  • Merge nhánh phụ vào nhánh hiện hành: git merge <nhánh-phụ>
  • Merge nhánh phụ vào nhánh chính (thay luôn nhánh chính)
      git checkout <nhanh>
      git merge -s ours master
      git checkout master
      git merge <nhanh>
    
  • So sánh với remote:
    • Copy một bản sao từ remote về: git fetch origin master
    • So sánh nhánh hiện tại với bản sao đó: git diff --stat FETCH_HEAD
    • Cập nhật từ remote về local: git pull origin <ten-nhanh>
  • Quay lại <commitID> nhưng chỉ để thử: git checkout <commitID>, sau đó muốn quay lại cái đang làm thì chỉ việc checkout nhánh đó là xong.
  • Muốn từ bỏ changes: git checkout .

Phần mềm

Tôi chọn hosting BitBucket vì nó hỗ trợ tốt trong việc tạo repository riêng tư.

Tôi dùng hoàn toàn bằng dòng lệnh để thao tác với git. Thỉnh thoảng tôi cũng dùng Git GUI (dùng lệnh gitk) để quan sát cho tiện. Nếu bạn không thích dùng dòng lệnh, bạn có thể dùng các phần mềm git desktop. Danh sách chi tiết được giới thiệu ở đây. Ở đây tôi gợi ý bạn dùng

Terminal trên windows tôi dùng cmder có hỗ trợ tốt các câu lệnh git và hỗ trợ tab.

Một số thuật ngữ dùng trong bài

  • repo: repository
  • local: trên máy của bạn
  • remote: repo trên server
  • directory: thư mục trên máy bạn

Các lệnh git thông dụng

Thiết lập thông tin

# thiết lập thông tin tổng quát của bạn
git config --global user.name "Dinh Anh Thi"
git config --global user.email "[email protected]"

Tạo/Clone một repository

git init <ten-repo> # Tạo một repository local

Upload (connect) local repo với remote repo trên Bitbucket (tham khảo tại đây)

  1. Tạo một repo trên Bitbucket (cùng tên với repo trên máy)
  2. Chọn “I have an existing repository” và làm theo hướng dẫn trên đấy

Clone từ remote server (Bitbucket)

git clone [email protected]địa-chỉ-máy-chủ:đường-dẫn-đến-repo

Git GUI

# mở giao diện Git GUI (1 trong hai cái dưới)
git gui
gitk

Git log

git status # xem thông tin mọi lúc, mọi thao tác
git log --oneline --graph --color --all --decorate # Xem các nhánh trực tiếp trong terminal
# --graph: vẽ text-based nhánh
# --decorate: hiển thị tên và tag

git log -- <file> # xem các commits có <file>
git log --prep="abc" # tìm commit có chứa "abc"
git log <từ>..<đến> # hiện các commit từ <từ> đến <đến>, có thể là commitID, branch name,...
git config color.ui true # Sử dụng kết quả git với nhiều màu
git config format.pretty oneline # Hiện git trên chỉ một dòng mỗi commit

Làm việc với các vùng tracked/untracked, staging (index)

git add <file> # add từng file vào staged
git add * # add tất cả các thay đổi vào staged
git commit -m "comment" # commit, sẵn sàng để push lên remote
git commit -a # commit tất cả các files
git reset <file> # unstaged 1 file nhưng nó vẫn còn trên directory
git checkout -- <file> # phục hồi lại tình trạng của chính file đó ở lần commit gần nhất
git rm <file> # xóa file và đưa vào staged chờ commit	

So sánh

git diff HEAD # với lần gần nhất commit
git diff --staged # với lần staged gần nhất
git diff --base <file> # so sánh với file base
git diff <nhánh-nguồn> <nhánh-cần-so-sánh> # so sánh hai nhánh

Làm việc với nhánh

git branch <tên-nhánh> # tạo nhánh mới
git checkout -b <tên-nhánh> # tạo nhánh mới đồng thời chuyển sang nhánh đó luôn

git checkout <tên-nhánh> # chuyển sang nhánh <tên-nhánh>
git checkout master # chuyển sang nhánh chính

git branch -d <tên-nhánh> # xóa nhánh
git push origin :<tên-nhánh> # xóa nhánh trên remote repo

git branch # liệt kê các nhánh local
git branch -a # liệt kê tất cả các nhánh (bao gồm cả remote)

git push origin <tên-nhánh> # đưa nhánh lên remote
git push --all origin # đưa tất cả nhánh hiện có lên remote
git branch --edit-description # mở vim và thêm chú thích cho nhánh
# để thoát vim, nhấn ESC, gõ ":q", để save file và thoát, gõ ":wq"

Xem thêm Cheatsheet cho vim tại đây. Trước khi muốn gõ lệnh trong vim, phải nhấn ESC trước.

Merge nhánh

git merge <nhánh-phụ> # nhập <nhánh-phụ> vào nhánh hiện hành
# nhập một file từ <nhanh-2> vào <nhanh-1>
git checkout <nhanh-1> # quay về <nhanh-1> trước
git checkout --patch <nhanh-2> <file-cần-merge>
# nó sẽ hỏi nhiều lựa chọn, chọn "y" để đồng ý merge
git add <file-cần-merge> # đưa vào staged
git commit # commit thay đổi
# override master bởi <nhanh>
git checkout <nhanh>
git merge -s ours master
git checkout master
git merge <nhanh>

Tag

git tag 1.0.0 <commitID> # thêm tag vào 1 commit

git push --tags origin # push tất cả các tag lên remote

# commitID = 10 ký tự đầu của mã commit, có thể ít hơn nhưng phải là duy nhất

So sánh với remote

Nếu bạn muốn xem sự khác nhau giữa cái ở local với cái trên remote (chỉ xem sự khác nhau thôi chứ không có merge)

git fetch origin master
# nói git đem thông tin của nhánh tên "master" từ remote tên "origin" về
# fetch sẽ lưu ở FETCH_HEAD

So sánh với working directroty

git diff --summary FETCH_HEAD # tổng hợp tất cả sự khác nhau
git diff --stat FETCH_HEAD # thêm thông tin
git diff FETCH_HEAD -- <dir/file> # so sánh thông tin của riêng file <file>

Đưa lên remote

git push --all # đứa tất cả các cái đã commit lên (bao gồm nhánh)
# hoặc
git push -u origin master 
# "-u" là nhớ các tham số để lần sau sử dụng
git push # là đủ

git push origin <tên-nhánh> # đưa nhánh lên remote
git push --all origin # đưa tất cả nhánh hiện có lên remote

Cập nhật từ remote về local

Nếu bạn đang ở đúng nhánh pull về (master trên remote về master trên local)

git pull origin master # cập nhật nhánh master từ remote về local
git pull origin <ten-nhanh> # cập nhật nhánh <ten-nhanh> từ remote về local

Nếu bạn ở khác nhánh, ví dụ đang ở nhánh <branch>

git pull origin master
# chép những file từ nhánh master về nhánh <branch> này, các nhánh khác còn lại vẫn giữ nguyên

Phục hồi

git checkout -- <file> # phục hồi lại tình trạng của chính file đó ở lần commit gần nhất
# bỏ hết thay đổi ở local và lấy cái trên remote về
git fetch origin
git reset --hard origin/master

Trong trường hợp chưa push lên remote, muốn trở về cái <commitID thì

git reset --hard <commitID> # xóa hết các commit và quay về <commitID>, directory cũng thế

Trong trường hợp muốn tạm thời quay lại cái <commitID>

# quay lại nhưng không commit
git checkout <commitID>
# muốn thực hiện 1 commit từ cái <commitID> này
git checkout -b old-state <commitID>

Tìm kiếm

git grep "foo()" # tìm kiếm trong working directory cho "foo()"

Xóa bỏ

# xóa repo local (không thể xóa repo remote)
rm -r .git 
# thư mục tên repo vẫn còn trên directory
git reset <file> # xóa file khỏi staged
# (file vẫn còn trong directory)

git rm <file> # xóa khỏi hệ thống và đưa vào staged chờ xóa
git branch -d <tên-nhánh> # local
git push origin :<tên-nhánh> # trên remote (server)

Dùng alias

Alias giúp bạn định nghĩa nhanh một số câu lệnh git, ví dụ thay vì gõ branch, bạn có thể định nghĩa cho br thay thế cho cụm này

git config alias.br branch

# bây giờ thay vì gõ
git branch
# bạn có thể gõ
git br

Nguồn tham khảo

  1. Basic git commands trên atlassian: bảng liệt kê các lệnh git thông dụng.
  2. Try Git on Github: thử sử dụng git ngay trên trình duyệt kèm theo giải thích chi tiết cho từng dòng lệnh (không đầy đủ, dành cho người bắt đầu)
  3. Sổ tay Git bởi Roger Dudler: từng bước từng bước giải thích và giới thiệu các dòng lệnh với phong cách thiết kế trang web dễ nhìn.
  4. Git cheat sheet của trang Atlassian: tuyển tập các lệnh git hay dùng kèm giải thích gọn.
git
github
bitbucket
Top