Những câu lệnh Git hữu ích trong công việc
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.
git config --global user.name "Vo Cao Ky"
git config --global user.email "vocaoky@example.com"
Để xem các config thì
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
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
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
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
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
.
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.
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
git status
Show hết tất cả branch có ở máy bạn.
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
git checkout -b ten-branch-moi
Chuyển sang branch khác
Sử dụng câu lệnh dưới đây
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à
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à
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.
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
git checkout feature
Sau đó thực hiện rebase với nhánh develop
git rebase develop
Nếu có xung đột, Git sẽ hiển thị thông báo như sau:
CONFLICT (content): Merge conflict in filename.txt
Bạn có thể xem các file xung đột bằng lệnh:
git status
Khi truy cập vào file xảy ra conflict sẽ hiển thị
<<<<<<< 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:
git add fileconflict.txt
Sau đó tiếp tục rebase:
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.
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.
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à:
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.
git stash apply
Hoặc lấy stash cụ thể:
git stash apply stash@{1}
Lấy stash mới nhất và xóa stash đó sau khi áp dụng.
git stash pop
Lấy stash thứ 2 và xóa nó.
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:
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.
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:
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:
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:
git rebase --continue
Nếu muốn hủy bỏ rebase:
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ầnforce 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é!