Chuyển đến nội dung chính

Git Switch Branch: Hướng dẫn với ví dụ thực tế

Tìm hiểu cách chuyển nhánh trong Git bằng git switch và hiểu sự khác nhau giữa git switch và git checkout.
Đã cập nhật 5 thg 10, 2026  · 8 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Các nhánh trong Git đại diện cho các dòng phát triển độc lập, cho phép nhà phát triển làm việc song song trên nhiều tính năng hoặc phiên bản của một dự án.

Nhánh Git cung cấp cách có cấu trúc để quản lý thay đổi mã, cho phép tích hợp mượt mà các tính năng mới, bản sửa lỗi và ý tưởng thử nghiệm mà không làm gián đoạn mã nguồn chính. 

Sơ đồ minh họa một dự án với ba nhánh

Trước đây, chúng ta dùng lệnh git checkout để di chuyển giữa các nhánh. Tuy nhiên, lệnh checkout cho phép làm nhiều việc hơn là chỉ đổi nhánh, dễ gây nhầm lẫn và có thể dẫn đến sai sót.

Được giới thiệu trong Git 2.23 vào tháng 8/2019, lệnh git switch mang đến cách trực quan hơn để chuyển và tạo nhánh mới.

Chuyển và tạo nhánh với Git Switch

Trong các dự án phức tạp, ưu tiên thay đổi liên tục và quy trình làm việc thường không tuyến tính. Thông thường, mỗi nhánh tập trung vào các thay đổi cụ thể, cho phép chúng ta đồng thời triển khai nhiều tính năng mới hoặc bản sửa lỗi, mỗi phần trên nhánh riêng của nó.

Có nhiều lý do khiến chúng ta cần tạm dừng một tính năng và chuyển sang nhánh khác, chẳng hạn như:

  • Đang chờ đánh giá mã (code review).
  • Gặp bế tắc và cần đồng nghiệp hỗ trợ.
  • Xử lý một hotfix cần ưu tiên ngay.

Chuyển nhánh hiệu quả là chìa khóa để giữ cho phát triển trơn tru và đảm bảo các thay đổi được đưa vào đúng nơi. Với nhiều đầu việc và sự phối hợp trong nhóm, có một cách chuyển nhánh đơn giản và đáng tin cậy là rất quan trọng.

Để chuyển sang một nhánh đã tồn tại bằng lệnh switch, chúng ta làm như sau:

git switch <branch-name>

Trong lệnh trên, <branch_name> cần được thay bằng tên nhánh muốn chuyển tới. Giả sử chúng ta muốn làm việc trên một tính năng mới nằm ở nhánh feature-x đã tồn tại, khi đó ta dùng lệnh:

git switch feature-x

Tìm tên các nhánh hiện có

Nếu muốn liệt kê các nhánh hiện có, chúng ta dùng lệnh git branch. Nhánh hiện tại sẽ được đánh dấu bằng dấu hoa thị. Ví dụ, nếu có ba nhánh cục bộ tên là main, feature-x và bug-z, và chúng ta đang ở nhánh main, đầu ra sẽ là:

* main
feature-x
bug-z

Chuyển sang một nhánh remote

Lệnh trước cho phép chúng ta đổi sang nhánh đã có trên máy cục bộ. Để chuyển sang nhánh từ kho remote, cần tạo một bản cục bộ của nhánh đó bằng lệnh sau:

git switch -c <local-branch-name> origin/<remote-branch-name>

Ở đây, <local-branch-name> là tên muốn đặt cho nhánh trên máy cục bộ, còn <remote-branch-name> là tên nhánh trên remote. Thông thường, ta dùng cùng một tên để tránh nhầm lẫn. Giả sử chúng ta chưa có nhánh feature-x cục bộ. Khi đó có thể tạo bản cục bộ và chuyển sang nhánh đó như sau:

git switch -c feature-x origin/feature-x

Khi dùng cùng tên, Git cung cấp cách viết tắt với tùy chọn --track. Vì vậy lệnh trên tương đương với:

git switch --track origin/feature-x

Để liệt kê các nhánh remote, chúng ta có thể dùng lệnh git branch -r.

Kho cục bộ không tự động theo dõi các nhánh remote. Do đó, trước khi liệt kê hoặc chuyển sang một nhánh remote, cần cập nhật kho cục bộ bằng git fetch.

Tạo nhánh mới và chuyển sang nhánh đó

Chúng ta muốn tạo một nhánh hoàn toàn mới để bắt đầu tính năng mới. Trong trường hợp này, có thể dùng cờ -c:

git switch -c <new-branch-name>

Thay <new-branch-name bằng tên nhánh. Ví dụ, để tạo nhánh tên feature-y, ta làm như sau:

git switch -c feature-y

Chuyển lại về nhánh trước đó

Thường thì sau khi chuyển nhánh để làm một việc, chúng ta muốn quay lại nhánh làm việc trước đó. Git cung cấp cách viết tắt bằng lệnh:

git switch -

Git Switch và Git Checkout

Lệnh git checkout đã có trong Git từ đầu. Trước khi git switch xuất hiện vào năm 2019, git checkout được dùng để đổi giữa các nhánh. Tuy nhiên, phạm vi của git checkout vượt quá việc chỉ điều hướng giữa nhánh. Dưới đây là khác biệt:

  • git switch: Nhằm mang đến cách trực quan hơn để chuyển và tạo nhánh mới. Mục tiêu là đơn giản hóa tập lệnh và giảm nhầm lẫn.
  • git checkout: Lệnh linh hoạt hơn, có thể dùng để chuyển nhánh, đồng thời checkout tệp và khôi phục nội dung từ các commit hoặc nhánh khác.

Thiết kế của git switch giúp khó vô tình ghi đè thay đổi hơn. Cú pháp rõ ràng hơn cho việc chuyển nhánh và tạo nhánh mới.

Vì git checkout làm nhiều việc (chuyển nhánh, khôi phục tệp, v.v.), nên khả năng mắc lỗi khi sử dụng cao hơn.

Git Switch: Lỗi thường gặp

Khi quản lý nhánh, bạn có thể gặp vài vấn đề phổ biến. Một trong số đó là cố tạo một nhánh đã tồn tại trên máy cục bộ. Một vấn đề khác thường gặp là cố chuyển nhánh khi có thay đổi chưa commit. Hãy bắt đầu với vấn đề đầu tiên.

Nhánh đã tồn tại cục bộ

Mỗi nhánh cục bộ cần một tên duy nhất. Bạn có thể dùng git switch để tạo nhánh cục bộ theo hai cách:

1. Theo dõi một nhánh remote:

git switch --track origin/<branch-name>

2. Tạo một nhánh cục bộ mới:

git switch -c <branch-name>

Trong cả hai trường hợp, nếu đã có nhánh cục bộ tên <branch-name>, Git sẽ báo lỗi:

fatal: a branch named '<branch-name>' already exists

Không thể tạo nhánh trùng tên với một nhánh cục bộ khác

Trong trường hợp này, chúng ta có thể chuyển sang nhánh đó mà không cần tạo mới bằng git switch <branch-name>.

Nhánh hiện tại có thay đổi chưa commit

Git sẽ không cho phép đổi nhánh nếu nhánh hiện tại có các thay đổi chưa commit sẽ bị ghi đè khi chuyển. Khi đó, Git sẽ báo lỗi:

Please commit your changes or stash them before you switch branches.

<code data-mce-selected=

Như thông báo nêu rõ, để xử lý tình huống này, chúng ta cần hoặc commit thay đổi trước, hoặc stash chúng lại. Nếu thay đổi đã sẵn sàng để đưa vào kho, chúng ta nên commit bằng:

git commit -m "Commit message"

Nếu muốn giữ thay đổi nhưng chưa sẵn sàng commit, ta có thể tạm lưu bằng lệnh git stash:

git stash

Nếu chúng ta stash thay đổi trước khi chuyển nhánh và muốn áp dụng lại khi quay về nhánh gốc, có thể dùng lệnh git stash pop.

Ngoài ra, chúng ta cũng có thể quyết định loại bỏ thay đổi bằng cờ --discard-changes:

git switch --discard-changes <branch-name>

Hãy cẩn trọng khi dùng tùy chọn sau vì các thay đổi sẽ bị xóa vĩnh viễn.

Sử dụng nâng cao với Git Switch

Khi cần tạo nhánh từ những điểm cụ thể trong lịch sử dự án hoặc xử lý các tình huống đặc biệt, git switch cung cấp các chức năng nâng cao để đáp ứng nhu cầu này.

Tách nhánh từ một điểm cụ thể

Theo mặc định, khi tạo nhánh bằng git switch, trạng thái khởi đầu của nhánh mới sẽ là HEAD của nhánh hiện tại.

Mặc định, tạo nhánh bắt đầu từ HEAD hiện tại

Hãy hình dung chúng ta muốn bắt đầu một nhánh mới từ một commit trước đó cụ thể. Mỗi commit được nhận diện bằng một <hash> duy nhất, có thể dùng với lệnh git switch để tạo nhánh mới từ commit đó. Cách thực hiện như sau:

switch -c feature-y <hash>

Thay <hash> bằng mã băm (hash) commit thực tế.

Chúng ta có thể tách nhánh từ một commit cụ thể bằng cách cung cấp mã băm commit

Chuyển sang detached HEAD

Nếu muốn khám phá hoặc thử nghiệm với một commit cụ thể mà không ảnh hưởng đến nhánh hiện tại hoặc tạo nhánh mới, chúng ta có thể dùng detached HEAD với lệnh:

git switch --detach <hash>

Chuyển sang detached head

Bằng cách tách HEAD, chúng ta có thể an toàn kiểm tra trạng thái của kho tại một commit cụ thể, chạy kiểm thử, hoặc thực hiện thay đổi tạm thời mà không lo các thay đổi đó bị commit nhầm vào nhánh làm việc hiện tại. Các trường hợp sử dụng phổ biến gồm:

  • Xem trạng thái cũ: Nếu muốn kiểm tra hoặc thử nghiệm một commit cũ hơn mà không thay đổi nhánh hiện tại, ta có thể chuyển sang commit đó ở trạng thái detached.
  • Thay đổi tạm thời: Nếu muốn thử nghiệm các thay đổi mà không ảnh hưởng tới bất kỳ nhánh nào, có thể thực hiện trong trạng thái detached HEAD. Lưu ý mọi commit mới trong trạng thái này sẽ không thuộc bất kỳ nhánh nào, và có thể cần tạo nhánh mới nếu muốn giữ các commit đó.
  • Mục đích build/test: Đôi khi chúng ta cần build hoặc kiểm thử phần mềm tại một commit cụ thể. Chuyển sang trạng thái detached HEAD tại commit đó cho phép thực hiện mà không ảnh hưởng cấu trúc nhánh của kho.

Buộc chuyển nhánh

Chúng ta đã biết Git sẽ không cho phép đổi nhánh nếu có thay đổi chưa commit có thể xung đột với nhánh đích. Nếu chắc chắn muốn loại bỏ các thay đổi đó và tiếp tục chuyển nhánh, có thể buộc thực hiện với tùy chọn -f, như sau:

git switch -f <branch-name>

Có một số lưu ý quan trọng. 

  • Mọi thay đổi chưa commit sẽ bị mất mà không có cảnh báo, có thể dẫn tới mất công sức nếu chưa lưu ở nơi khác. 
  • Dùng -f bừa bãi có thể tạo thói quen xấu, khuyến khích bỏ qua các thực hành quản lý phiên bản đúng đắn như stash hoặc commit các thay đổi đang làm dở (WIP). Điều này có thể làm lịch sử kho lộn xộn và gây khó khăn cho cộng tác. Vì vậy, dù git switch -f nhanh và tiện, hãy dùng một cách thận trọng và hiểu rõ rủi ro để giảm thiểu hệ quả.

Kết luận

Lệnh git switch giúp việc chuyển và tạo nhánh dễ dàng hơn so với lệnh git checkout cũ.

Nó đơn giản hóa quy trình và giảm sai sót, giúp nhà phát triển quản lý mã nguồn thuận tiện hơn.

Lệnh này giúp tránh các vấn đề thường gặp, như vô tình ghi đè thay đổi hoặc nhầm lẫn giữa các chức năng khác nhau của git checkout.

Áp dụng lệnh này có thể giúp điều hướng các nhánh Git trực quan hơn và tăng cường hợp tác trong nhóm phát triển.


François Aubry's photo
Author
François Aubry
LinkedIn
Kỹ sư full-stack & nhà sáng lập tại CheapGPT. Giảng dạy luôn là niềm đam mê của tôi. Từ những ngày còn là sinh viên, tôi đã háo hức tìm kiếm cơ hội kèm cặp và hỗ trợ các bạn học khác. Niềm đam mê đó đã thôi thúc tôi theo học tiến sĩ, nơi tôi cũng đảm nhiệm vai trò trợ giảng để hỗ trợ con đường học thuật của mình. Trong những năm ấy, tôi tìm thấy sự mãn nguyện lớn lao trong môi trường lớp học truyền thống, xây dựng kết nối và thúc đẩy việc học tập. Tuy nhiên, với sự ra đời của các nền tảng học trực tuyến, tôi nhận ra tiềm năng thay đổi của giáo dục số. Thực tế, tôi đã trực tiếp tham gia phát triển một nền tảng như vậy tại trường đại học của chúng tôi. Tôi tận tâm kết hợp các nguyên tắc giảng dạy truyền thống với những phương pháp số đổi mới. Đam mê của tôi là tạo ra các khóa học không chỉ hấp dẫn và giàu thông tin mà còn dễ tiếp cận với người học trong thời đại số này.
Chủ đề
Git

Học quản lý phiên bản với các khóa học này!

Khóa học

Giới thiệu về các khái niệm GitHub

2 giờ
53.7K
Tìm hiểu cách sử dụng các tính năng khác nhau của GitHub, điều hướng giao diện và thực hiện các tác vụ cộng tác hàng ngày.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm