Trong môi trường phát triển phần mềm hiện đại, Git là công cụ không thể thiếu giúp các nhóm lập trình viên và những người duy trì dự án mã nguồn mở quản lý phiên bản hiệu quả, theo dõi thay đổi và cộng tác một cách linh hoạt.
Hướng dẫn “cheat sheet” này cung cấp danh sách các lệnh Git quan trọng, giúp bạn thao tác nhanh chóng trong quá trình làm việc với kho mã nguồn. Nếu bạn chưa cài đặt và thiết lập Git, hãy tham khảo bài viết Hướng Dẫn Đóng Góp Cho Mã Nguồn Mở: Bắt Đầu Với Git để nắm bắt quy trình chi tiết.
Bạn đang học cách sử dụng Git để quản lý mã nguồn hiệu quả? Để triển khai dự án mượt mà, một VPS giá rẻ sẽ là lựa chọn tối ưu. Khám phá các gói VPS giá rẻ tại DataOnline, đảm bảo hiệu suất cao, phù hợp cho lập trình viên và doanh nghiệp nhỏ.
Cách sử dụng hướng dẫn này:
- Đây là một hướng dẫn dạng “cheat sheet” với các đoạn lệnh dòng lệnh độc lập.
- Bạn có thể chuyển ngay đến bất kỳ phần nào liên quan đến tác vụ bạn đang muốn thực hiện.
- Khi thấy đoạn văn bản được tô sáng trong các lệnh của hướng dẫn, hãy nhớ rằng đoạn văn bản đó ám chỉ các commit và tệp trong kho (repository) của riêng bạn.
Thiết lập và khởi tạo
Kiểm tra phiên bản Git của bạn bằng lệnh sau, đồng thời xác nhận rằng Git đã được cài đặt:
git --version
Git cho phép bạn cấu hình một số thiết lập sẽ áp dụng cho tất cả các kho trên máy cục bộ của bạn. Ví dụ, cấu hình tên người dùng mà Git sẽ dùng để ghi nhận bạn với mọi thay đổi bạn thực hiện trong kho cục bộ:
git config --global user.name “firstname lastname”
Cấu hình địa chỉ email để gắn với từng “marker” lịch sử:
git config --global user.email “valid-email”
Cấu hình trình soạn thảo văn bản ưa thích:
git config --global core.editor “nano”
Bạn có thể khởi tạo (initialize) thư mục làm việc hiện tại thành một kho Git bằng lệnh init
:
git init
Để sao chép (clone) một kho Git có sẵn trên máy chủ từ xa, bạn sẽ dùng git clone
với URL hoặc vị trí của repo (nếu kết nối qua máy chủ, bạn sẽ dùng SSH):
git clone https://www.github.com/username/repo-name
Hiển thị kho từ xa (remote repository) của thư mục Git hiện tại:
git remote
Để có thông tin chi tiết hơn, sử dụng tham số -v
:
git remote -v
Thêm “upstream” Git, có thể là một URL hoặc được lưu trữ trên máy chủ (trường hợp sau cần kết nối SSH):
git remote add upstream https://www.github.com/username/repo-name
Giai đoạn tạm thời
Khi bạn đã sửa đổi một tệp và đánh dấu tệp đó sẽ xuất hiện trong commit kế tiếp, tệp này được coi là đã “staged.”
Kiểm tra trạng thái kho Git của bạn, bao gồm các tệp đã thêm nhưng chưa được stage, và các tệp đã được stage:
git status
Để stage các tệp đã sửa đổi, dùng lệnh add
, bạn có thể chạy nhiều lần trước khi commit. Nếu bạn chỉnh sửa tiếp và muốn đưa thay đổi mới vào commit kế, bạn phải chạy lại add
.
Bạn có thể chỉ định chính xác tệp cụ thể:
git add my_script.py
Với dấu chấm (.
), bạn có thể thêm tất cả tệp trong thư mục hiện tại, bao gồm cả tệp bắt đầu bằng dấu chấm:
git add .
Nếu bạn muốn thêm tất cả tệp trong thư mục hiện tại cũng như các thư mục con, bạn có thể dùng tham số -all
hoặc -A
:
git add -A
Bạn có thể xóa một tệp khỏi trạng thái staged (nhưng vẫn giữ các thay đổi trong thư mục làm việc) bằng lệnh reset
:
git reset my_script.py
Cam kết
Khi bạn đã stage các cập nhật, bạn sẵn sàng commit chúng, qua đó ghi lại những thay đổi bạn đã thực hiện trong kho.
Để commit các tệp đã stage, bạn chạy lệnh commit
kèm thông điệp ý nghĩa để tiện theo dõi:
git commit -m "Commit message"
Bạn có thể gộp bước stage tất cả các tệp đã theo dõi (tracked files) bằng cách commit chúng trong một bước duy nhất:
git commit -am "Commit message"
Nếu bạn cần chỉnh sửa thông điệp commit, bạn có thể làm thế với tham số --amend
:
git commit --amend -m "New commit message"
Nhánh
Trong Git, một branch là một con trỏ di động trỏ đến một trong các commit trong kho, cho phép bạn cô lập công việc và quản lý phát triển tính năng cũng như tích hợp. Bạn có thể tìm hiểu thêm về branch trong tài liệu của Git.
Liệt kê tất cả branch hiện có với lệnh branch
. Dấu hoa thị (*) sẽ xuất hiện cạnh branch hiện tại của bạn:
git branch
Tạo một branch mới. Bạn vẫn ở branch hiện tại cho đến khi bạn chuyển sang branch mới này:
git branch new-branch
Chuyển sang bất kỳ branch nào có sẵn và “check out” branch đó vào thư mục làm việc hiện tại:
git checkout another-branch
Bạn có thể gộp bước tạo và chuyển sang một branch mới bằng tham số -b
:
git checkout -b new-branch
Đổi tên branch:
git branch -m current-branch-name new-branch-name
Trộn (merge) lịch sử của branch được chỉ định vào branch bạn đang làm việc:
git merge branch-name
Hủy merge trong trường hợp xảy ra xung đột:
git merge --abort
Bạn cũng có thể chọn một commit cụ thể để merge với cherry-pick
kèm chuỗi tham chiếu commit:
git cherry-pick f7649d0
Khi bạn đã merge xong một branch và không còn cần branch đó nữa, bạn có thể xóa nó:
git branch -d branch-name
Nếu bạn chưa merge branch vào main
, nhưng chắc chắn muốn xóa nó, bạn có thể xóa mạnh (force delete):
git branch -D branch-name
Hợp tác và cập nhật
Để tải về (fetch) các thay đổi từ một kho khác, ví dụ như kho upstream, bạn dùng:
git fetch upstream
Merge các commit đã fetch. Lưu ý một số kho có thể dùng master
thay vì main
:
git merge upstream/main
Push hoặc gửi các commit của branch cục bộ lên branch của kho từ xa:
git push origin main
Tải (fetch) và merge bất kỳ commit nào từ branch được theo dõi (tracking remote branch):
git pull
Kiểm tra
Hiển thị lịch sử commit cho branch hiện tại:
git log
Cho thấy các commit đã thay đổi một tệp cụ thể. Lệnh này theo dõi tệp kể cả khi tệp đã được đổi tên:
git log --follow my_script.py
Hiển thị các commit trên một branch mà không có trên branch khác. Ví dụ, hiển thị các commit trên a-branch
mà không có trên b-branch
:
git log a-branch..b-branch
Xem “reference logs” (reflog) để biết thời điểm các nhánh (branch) hoặc tham chiếu (reference) được cập nhật lần cuối trong kho:
git reflog
Xem bất kỳ đối tượng nào trong Git thông qua chuỗi commit hoặc mã băm (hash) của nó ở định dạng dễ đọc hơn:
git show de754f5
Hiển thị thay đổi
Lệnh git diff
hiển thị sự khác biệt giữa các commit, các branch, v.v. Bạn có thể đọc thêm về nó trong tài liệu Git.
So sánh các tệp đã sửa đổi có trong khu vực staging:
git diff --staged
Hiển thị sự khác biệt giữa những gì có trên a-branch
nhưng không có trên b-branch
:
git diff a-branch..b-branch
So sánh sự khác biệt giữa hai commit cụ thể:
git diff 61ce3e6..e221d9c
Theo dõi các thay đổi về đường dẫn (path) bằng cách xóa tệp khỏi dự án và stage việc xóa này để commit:
git rm file
Hoặc thay đổi đường dẫn của một tệp hiện có rồi stage việc di chuyển:
git mv existing-path new-path
Kiểm tra log commit để xem có đường dẫn nào được chuyển đổi hay không:
git log --stat -M
Lưu trữ tạm thời
Đôi khi bạn nhận ra rằng mình đã sửa một số đoạn code, nhưng trước khi hoàn thành, bạn phải bắt đầu làm việc khác. Bạn chưa sẵn sàng commit những thay đổi này, nhưng cũng không muốn mất chúng. Lệnh git stash
cho phép bạn lưu lại các chỉnh sửa cục bộ và quay trở về thư mục làm việc trùng với commit HEAD gần nhất.
Lưu trữ (stash) công việc hiện tại:
git stash
Xem những gì bạn đang stash:
git stash list
Các stash sẽ được đặt tên dạng stash@{0}
, stash@{1}
, v.v.
Hiển thị thông tin về một stash cụ thể:
git stash show stash@{0}
Để đưa các tệp trong stash hiện tại ra ngoài stash nhưng vẫn giữ stash đó, dùng apply
:
git stash apply stash@{0}
Nếu bạn muốn đưa các tệp ra khỏi stash và không cần giữ stash nữa, dùng pop
:
git stash pop stash@{0}
Nếu bạn không còn cần các tệp đã lưu trong một stash cụ thể, bạn có thể xóa stash đó:
git stash drop stash@{0}
Nếu bạn có nhiều stash và không cần dùng bất kỳ stash nào, bạn có thể dùng clear
để xóa tất cả:
git stash clear
Loại bỏ tệp khỏi theo dõi
Nếu bạn muốn giữ một số tệp trong thư mục Git cục bộ nhưng không muốn commit chúng vào dự án, bạn có thể thêm chúng vào tệp .gitignore
để chúng không gây xung đột.
Dùng trình soạn thảo văn bản như nano để thêm tệp vào .gitignore
:
nano .gitignore
Để xem ví dụ về các tệp .gitignore
, bạn có thể tham khảo kho mẫu .gitignore
trên GitHub:
Tái lập nền
Rebase cho phép chúng ta di chuyển các nhánh bằng cách thay đổi commit mà nhánh đó dựa vào. Với rebasing, bạn có thể “squash” (gộp) hoặc sửa lại (reword) các commit.
Bạn có thể bắt đầu quá trình rebase bằng cách gọi số commit bạn đã thực hiện muốn rebase (trong ví dụ dưới là 5):
git rebase -i HEAD~5
Hoặc bạn có thể rebase dựa trên một chuỗi commit hoặc mã băm cụ thể:
git rebase -i 074a4e5
Khi bạn đã squash hoặc reword các commit, bạn có thể hoàn tất rebase nhánh của mình trên phiên bản mới nhất của mã nguồn upstream. Lưu ý một số kho có thể dùng master
thay vì main
:
git rebase upstream/main
Để tìm hiểu thêm về rebasing và cập nhật, bạn có thể đọc Cách Rebase và Cập Nhật Pull Request, áp dụng cho bất kỳ loại commit nào.
Hoàn nguyên và đặt lại
Bạn có thể hoàn tác (revert) các thay đổi đã thực hiện trong một commit cụ thể bằng lệnh revert
. Thư mục làm việc của bạn cần “sạch” (clean) để thực hiện thao tác này:
git revert 1fc6665
Đôi khi, ví dụ sau khi rebase, bạn cần reset thư mục làm việc. Bạn có thể reset về một commit cụ thể và xóa tất cả thay đổi:
git reset --hard 1fc6665
Để đẩy (push) commit cuối cùng không xung đột lên kho origin, bạn sẽ cần dùng --force
:
Cảnh báo: Force pushing lên nhánh
main
(hoặc đôi khi làmaster
) thường không được khuyến khích trừ khi có lý do thực sự quan trọng. Hãy sử dụng cẩn trọng khi làm việc trên kho của chính bạn, và cố gắng tránh thao tác này khi cộng tác với người khác.
git push --force origin main
Để xóa các tệp và thư mục con chưa được theo dõi (untracked) khỏi thư mục Git cho một nhánh làm việc sạch sẽ, bạn có thể dùng:
git clean -f -d
Nếu bạn cần thay đổi kho cục bộ của mình để nó giống với nhánh main
của upstream (ví dụ có quá nhiều xung đột), bạn có thể thực hiện reset “cứng” (hard reset):
Lưu ý: Thao tác này sẽ khiến kho cục bộ của bạn trông chính xác như kho upstream. Bất kỳ commit nào bạn đã tạo nhưng chưa được pull vào upstream sẽ bị xóa.
git reset --hard upstream/main
Kết Luận
Hướng dẫn này đã giới thiệu các lệnh Git quan trọng giúp bạn quản lý kho mã nguồn và làm việc nhóm hiệu quả. Nắm vững những lệnh này sẽ giúp bạn tối ưu hóa quy trình phát triển và dễ dàng cộng tác trong các dự án phần mềm.
Khi làm quen với Git, việc lưu trữ và chạy dự án trên máy chủ là cần thiết. Thuê VPS tại DataOnline giúp bạn triển khai ứng dụng dễ dàng với chi phí hợp lý. Tìm hiểu ngay các dịch vụ thuê VPS chất lượng, hỗ trợ tối ưu cho lập trình viên.
Bạn có thể tìm hiểu thêm về phần mềm mã nguồn mở và cách cộng tác trong chuỗi hướng dẫn “Giới Thiệu về Mã Nguồn Mở”:
- Cách Đóng Góp Cho Mã Nguồn Mở: Bắt Đầu Với Git
- Cách Tạo Pull Request trên GitHub
- Cách Rebase và Cập Nhật Pull Request
- Cách Duy Trì Dự Án Phần Mềm Mã Nguồn Mở
Vẫn còn nhiều lệnh và biến thể hữu ích khác mà bạn có thể cần dùng trong quá trình làm việc với Git. Để tìm hiểu thêm về các tùy chọn có sẵn, bạn có thể chạy:
git --help
Bạn cũng có thể đọc thêm về Git và xem tài liệu chính thức tại trang web của Git: https://git-scm.com/