
Các Lệnh Git Nâng Cao
Bài viết này cung cấp cho các bạn kiến thức về các lệnh Git nâng cao. Gọi là nâng cao vì nó khó hiểu hơn các lệnh cơ bản, tuy nhiên khi bạn đã hiểu bạn sẽ biết cách sử dụng chúng hiệu quả để phục vụ cho công việc Lập trình của mình.
Các lệnh git cơ bản: commit, pull, push, fetch
Các lệnh nâng cao: rebase, cherry pick, amend
Bắt đầu thôi!
Git Rebase
Lệnh rebase mặc định
Git rebase là một lệnh mạnh mẽ trong Git cho phép lập trình viên viết lại lịch sử commit của 1 nhánh (branch). Thay vì tạo ra một commit merge giữa branch base và branch feature, bạn có thể rebase branch feature lên trên branch base để tạo ra một lịch sử commit tuyến tính, gọn gàng hơn.


Cú pháp thực hành Git Rebase.
Mô phỏng tình huống bạn đang làm việc với nhánh feature/my-feature-branch và muốn cập nhật các commit mới của develop lên feature/my-feature-branch nhưng không tạo ra 1 commit merge.
git checkout develop
git pull // lấy thống tin mới nhất của develop
git checkout feature/my-feature-branch // checkout nhánh feature của bạn
git rebase develop
Sau khi thực hiện các bước rebase trên, bạn sẽ đưa được các commit mới trong nhánh feature/my-feature-branch lên trên đầu của nhánh develop như hình mô tả bên trên.
Trong quá trình rebase, bạn có thể gặp phải những conflict. Lúc này, bạn cần phải giải quyết các conflict này trước khi tiếp tục quá trình rebase. Mình sẽ hướng dẫn chi tiết cách xử lý các tình huống xung đột trong khóa học Git Mastery.
Khi bạn rebase một nhánh, bạn đang viết lại lịch sử commit của nhánh đó. Vì lịch sử commit trên máy của bạn đã khác với lịch sử commit trên remote, nên lệnh push thông thường sẽ bị từ chối. Lệnh git push --force
sẽ buộc cập nhật lịch sử commit trên remote cho trùng khớp với lịch sử commit trên máy của bạn. Tuy nhiên, hãy cẩn trọng khi sử dụng lệnh này vì nó có thể ghi đè lên những thay đổi của người khác nếu bạn đang làm việc nhóm.
Git Push Force
git push --force
là một lệnh rất mạnh trong Git, nó cho phép bạn ghi đè lên các commit đã tồn tại trước đó trên remote. Việc sử dụng lệnh này cần hết sức cẩn thận, nếu trong trường hợp nhánh (branch) có nhiều người cùng cộng tác thì mỗi lần git push --force
cần phải làm 2 việc:
- 1: Thực hiện lệnh git pull để kéo các thay đổi mới nhất của remote về nhánh Local của mình,
- 2: Thông báo cho cả team để mọi người cùng đồng thuận, tránh xung đột.
Để an toàn hơn, bạn có thể sử dụng lệnh git push --force-with-lease
. Lệnh này sẽ kiểm tra xem có ai đã thay đổi code trên Remote kể từ lần cập nhật cuối cùng của bạn hay chưa. Nếu có, lệnh sẽ bị từ chối.
git push --force
git push --force-with-lease
Git Cherry Pick
Git cherry pick là một lệnh cho phép bạn chọn lọc một commit cụ thể từ nhánh này gắn lên nhánh khác. Điều này hữu ích khi bạn muốn đưa một thay đổi nhỏ, cụ thể giữa các nhánh với nhau mà không phải merge, hay rebase toàn bộ nhánh.

Để thực hiện Cherry Pick bạn phải có thông tin hash id của một commit cụ thể.
Khi thực hiện cherry pick, bạn đứng tại nhánh mà sắp được thêm commit. Thực hiện dòng lệnh
git cherry-pick <commit-hash-id>
Trong quá trình thực hiện git cherry pick, nếu có xảy ra conflict bạn sẽ phải tự thay solve các conflict này trước khi tiếp tục.
Trên các ứng dụng Git GUI (GitHub Desktop, IntelliJ, VS Code, ..) sẽ có các tính năng giao diện trực quan giúp bạn thao tác điều này. Mình sẽ chia sẻ kỹ hơn trong các video khóa học Git Mastery nhé!
Git Amend
git amend: ghép với commit gần nhất
Git Amend là lệnh cho phép bạn sửa đổi commit gần nhất. Thay vì tạo ra một commit mới để thay thế những thay đổi nhỏ, bạn có thể sử dụng amend để trực tiếp sửa đổi trên commit hiện tại.

Hãy xem một git amend là 1 git commit bình thường với option –amend ở cuối cùng.
git commit --amend --no-edit // add các change đã stage vào commit gần nhất, không thay đổi commit message
git commit -m "New commit message" --amend // add các change đã stage vào commit gần nhất, thay đổi commit message
Chi tiết sử dụng git amend trên các phần mềm GitHub Desktop, VS Code, IntelliJ các bạn xem trong khóa học Git Mastery nhé!