🤖 AI vẫn chưa thể thay thế mình đâu, bạn có thể khám phá những gì mình đang làm tại đây!

Những câu lệnh Git hữu ích trong công việc

K
Võ Cao Kỳ

2025/02/24

Không dài dòng, chỉ cần nhớ những câu lệnh này là làm việc với Git được rồi.
Tất nhiên sẽ có những câu lệnh tương tự nhưng không cần thiết phải nhớ những
câu lệnh đó. Vì nhớ thêm chỉ làm bạn đau đầu thôi.

Cài đặt Git

Windows và Mac thì cài thông qua link này: https://git-scm.com/

Còn anh em Linux thì đã đã được cài sẵn rồi!

Cấu hình git

Tên và email của bạn sẽ đại diện cho bạn khi bạn commit cũng như là push code. Đây là bắt buộc nếu như bạn mới cài đặt Git lần đầu.

index.sh
git config --global user.name "Vo Cao Ky"
git config --global user.email "vocaoky@example.com"

Để xem các config thì

index.sh
git config --global --list

Muốn config chỉ riêng một repository thôi thì dùng --local

Khởi tạo repository ở local và push lên remote

Khởi tạo một Git repository

index.sh
git init

Tạo file, rồi code các kiểu trong Git repository. Bây giờ chúng ta sẽ tiến hành commit

index.sh
git add .
git commit -m 'init'

Mặc định thì mới khởi tạo Git Repository ở local, nhánh mặc định sẽ là master, nếu anh em muốn đổi tên sang nhánh khác, ví dụ develop thì dùng câu lệnh

index.sh
git branch -M develop

Nhánh đầu tiên push lên Git chính là nhánh mặc định của Git Repository đó trên remote

Bây giờ chúng ta sẽ tạo một mối liên kết giữa local và remote để có thể push code lên

index.sh
git remote add origin git@github.com:jutlyne/portfolio.git

Các bạn thay thế git@github.com:jutlyne/portfolio.git thành URL SSH Git Repository của các bạn nhé

Bước cuối cùng là push lên thôi. Dưới đây là mình push lên với tư cách là nhánh develop.

index.sh
git push -u origin develop

Mình thêm -u để những lần sau thì chỉ cần git push thôi là nó cũng hiểu là mình push ở nhánh hiện tại trên local, khỏi cần phải origin develop.

Clone Repository ở remote về

Quá dễ, chúng ta sẽ clone bằng giao thức SSH, ai đang dùng HTTPS thì cũng nên đổi sang SSH đi cho tiện và bảo mật.

index.sh
git clone git@github.com:jutlyne/portfolio.git

Kiểm tra đang ở branch nào

Câu lệnh dưới sẽ show branch hiện tại, các file mà bạn modify trong các trạng thái của git

index.sh
git status

Show hết tất cả branch có ở máy bạn.

index.sh
git branch

À mà nếu anh em thấy thiếu hay dư branch nào thì cứ git fetch -p rồi chạy lại git branch là được.

Tạo một branch mới từ branch hiện tại

Sử dụng câu lệnh dưới đây

index.sh
git checkout -b ten-branch-moi

Chuyển sang branch khác

Sử dụng câu lệnh dưới đây

index.sh
git checkout ten-branch

Nếu branch đó không có trên local thì dùng git fetch để nó update các branch trên local là được

Kiểm tra lịch sử commit

Phổ biến nhất là

index.sh
git log --online

À mà nếu muốn thoát ra khỏi cái Editor trên terminal thì nhấn q, muốn xem trang tiếp theo thì w, trang trước đó thì space

Nhưng mình thường dùng Git UI trên VS Code cho trực quan 🤣

Kéo code từ remote về để cập nhập code dưới local

Ví dụ bạn đang code ở branch feature/login, bạn muốn kéo code nhánh feature/register về nhánh hiện tại (feature/login) của bạn.

Công việc của bạn chỉ là

index.sh
git rebase feature/register

Nếu có ai đó cập nhật code nhánh feature/login trên remote, bây giờ bảo bạn kéo code mới về rồi code tiếp.

index.sh
git pull

Code xong thì cứ git push lên thôi.

Đơn giản mà đúng không!

Giải quyết xung đột giữa các branch (conflict)

Khi sử dụng git rebase, có thể xảy ra xung đột nếu cùng một tệp bị thay đổi trên cả branch hiện tại và branch mà bạn đang rebase. Dưới đây là cách giải quyết xung đột hiệu quả.

Đầu tiên chúng ta phải ở branch cần xử lý conflict với branch chính bằng cách sử dụng git checkout ở đây tôi sẽ thực hiện với branch feature đang có xung đột với branch cần merge là develop

index.sh
git checkout feature

Sau đó thực hiện rebase với nhánh develop

index.sh
git rebase develop

Nếu có xung đột, Git sẽ hiển thị thông báo như sau:

index.sh
CONFLICT (content): Merge conflict in filename.txt

Bạn có thể xem các file xung đột bằng lệnh:

index.sh
git status

Khi truy cập vào file xảy ra conflict sẽ hiển thị

index.sh
<<<<<<< HEAD
// Code từ branch hiện tại (feature)
=======
// Code từ branch được rebase vào (develop)
>>>>>>> develop

Sau đó bạn có thể chỉnh sửa chính xác nội dung cần giải quyết sau đó đánh dấu xung đột đã giải quyết bằng lệnh:

index.sh
git add fileconflict.txt

Sau đó tiếp tục rebase:

index.sh
git rebase --continue

Nếu có nhiều xung đột, quá trình này có thể lặp lại.

💡 Mẹo:

Bạn có thể hủy quá trình rebase bằng cách nhập git rebase --abort

Khi đã giải quyết hết xung đột bạn có thể đẩy branch lên remote.

index.sh
git push --force-with-lease

Không nên push sử dụng --force hoặc -f vì khi một người khác push commit mới trước đó vào branch hiện tại, nhưng bạn không fetch về trước khi --force, commit của họ sẽ bị mất vĩnh viễn.

Còn --force-with-lease sẽ kiểm tra:

  • Nếu không có commit mới từ người khác, lệnh này hoạt động giống --force.
  • Nếu có commit mới, Git sẽ từ chối push và báo lỗi.

Hướng dẫn sử dụng git stash

git stash giúp bạn lưu trữ tạm thời các thay đổi chưa commit mà không cần tạo commit, giúp bạn dễ dàng chuyển nhánh hoặc làm việc khác mà không mất đi các thay đổi này.

index.sh
git stash

git stash giúp:

  • Lưu tất cả các thay đổi chưa commit (ở tracked files) vào một stash ẩn.
  • Reset lại workspace về trạng thái sạch như khi vừa pull code.

Xem danh sách stash

Liệt kê các stash hiện có bằng cách sử dụng git stash list, kết quả nhận được sẽ là:

index.sh
stash@{0}: WIP on feature-xyz: 123abc Some commit message
stash@{1}: WIP on main: 456def Another commit message

Khôi phục stash

Lấy stash mới nhất và giữ lại stash.

index.sh
git stash apply

Hoặc lấy stash cụ thể:

index.sh
git stash apply stash@{1}

Lấy stash mới nhất và xóa stash đó sau khi áp dụng.

index.sh
git stash pop

Lấy stash thứ 2 và xóa nó.

index.sh
git stash pop stash@

Hợp nhất commit

Khi Nào Cần Merge Commit?

Trong quá trình phát triển, bạn có thể gặp các trường hợp sau mà việc merge commit là cần thiết:

  • Bạn commit quá nhiều lần cho một tính năng nhỏ, làm lịch sử Git rối rắm.
  • Bạn muốn gộp nhiều commit lại thành một commit duy nhất để dễ quản lý.
  • Bạn muốn chỉnh sửa lại commit message của một số commit trước đó.

Trước khi thực hiện rebase, hãy kiểm tra lại lịch sử commit của bạn:

index.sh
git log --oneline --graph --decorate -n 5

Thực hiện lệnh rebase

Dưới đây mình sẽ thực hiện rebase với 3 commit bạn có thể thay đổi số lượng commit tùy vào nhu cầu.

index.sh
git rebase -i HEAD~3

Git sẽ mở một trình soạn thảo hiển thị danh sách 3 commit gần nhất:

index.sh
pick abc123 Commit A
pick def456 Commit B
pick ghi789 Commit C

Chỉnh sửa để merge commit

Bạn có thể thay đổi pick thành:

  • squash (s): Gộp commit và giữ lại nội dung message của tất cả commit.
  • fixup (f): Gộp commit nhưng chỉ giữ message của commit đầu tiên.

Ví dụ, nếu bạn muốn gộp Commit B và Commit C vào Commit A, hãy chỉnh sửa thành:

index.sh
pick abc123 Commit A
squash def456 Commit B
squash ghi789 Commit C

Lưu file và thoát.

Chỉnh sửa commit message

Nếu bạn chọn squash, Git sẽ yêu cầu bạn chỉnh sửa lại commit message. Bạn có thể giữ nguyên hoặc viết lại sao cho dễ hiểu hơn.

Nếu dùng fixup, Git sẽ tự động gộp commit mà không yêu cầu chỉnh sửa message.

Hoàn tất rebase

Sau khi chỉnh sửa message, Git sẽ thực hiện rebase. Nếu gặp conflict, hãy giải quyết bằng cách chỉnh sửa file xung đột và chạy:

index.sh
git rebase --continue

Nếu muốn hủy bỏ rebase:

index.sh
git rebase --abort

Sau khi hoàn thành, bạn có thể kiểm tra lại lịch sử commit bằng git log --oneline.

Những Sai Lầm Cần Tránh

  • Dùng rebase trên nhánh đã push lên remote: Nếu bạn đã push commit lên remote và sau đó thực hiện git rebase -i, bạn cần force push (git push --force). Tuy nhiên, điều này có thể gây xung đột với đồng nghiệp nếu họ đã pull code trước đó.
  • Không kiểm tra kỹ commit trước khi rebase: Luôn chạy git log trước khi rebase để tránh xóa nhầm commit quan trọng.
  • Không giải quyết conflict đúng cách: Nếu gặp conflict, hãy đọc kỹ lỗi Git báo và sửa từng file trước khi tiếp tục.

Kết Luận

Hy vọng những chia sẻ trên sẽ giúp bạn tự tin hơn khi làm việc với Git!

Bạn đã gặp vấn đề gì khi sử dụng git? Hãy chia sẻ kinh nghiệm của bạn trong phần bình luận nhé!


Cảm ơn tài liệu tham khảo từ 💓


Lưu ý: Tất cả các bài viết trên blog này được viết dựa trên kinh nghiệm cá nhân và quá trình tìm hiểu của mình. Mình hy vọng chúng có thể giúp ích cho bạn trong công việc và học tập, nhưng hãy xem đây như một nguồn tham khảo thay vì hướng dẫn tuyệt đối. Công nghệ luôn thay đổi, mỗi dự án có những đặc thù riêng, vì vậy bạn nên kiểm tra, thử nghiệm và điều chỉnh cho phù hợp với nhu cầu thực tế. Nếu có góp ý hay câu hỏi, đừng ngần ngại chia sẻ nhé!

Copyright © 2025 Vo Cao Ky

Cảm ơn Nuxt.js, ShadcnUI đã giúp mình build website này.