Câu hỏi thường gặp
Tôi gặp lỗi: "please commit your changes or stash them before you switch branches." Sửa thế nào?
Git ngăn chúng ta chuyển sang nhánh khác nếu nhánh hiện tại có thay đổi chưa commit. Để xử lý, hoặc là stash các thay đổi hiện có, hoặc commit chúng.
Để commit, dùng lệnh sau:
git commit -m "Commit message"
Hoặc, nếu muốn giữ lại thay đổi mà chưa commit, bạn có thể dùng lệnh git stash để tạm thời lưu công việc:
git stash
Sau đó, bạn có thể áp dụng lại khi quay về nhánh ban đầu bằng lệnh git stash pop.
Nếu nhánh từ xa trùng tên với một nhánh cục bộ thì sao?
Tên nhánh phải là duy nhất trong Git. Nếu gặp lỗi nói rằng nhánh đã tồn tại, nghĩa là đã có một nhánh cục bộ trùng tên. Có thể rơi vào hai trường hợp:
- Chúng ta đã từng checkout nhánh này trước đó. Khi đó, có thể chuyển thẳng sang nó mà không cần fetch bằng lệnh
git checkout <branch_name>. Lưu ý chúng ta bỏ tham số-bvốn dùng để chỉ định muốn tạo nhánh mới. Vì nhánh đã tồn tại, không cần tạo lại. - Ở thời điểm nào đó, chúng ta đã tạo một nhánh khác nhưng trùng tên. Có thể khắc phục bằng cách dùng tên nhánh khác với
git checkout -b <different_name> origin/<branch_name>.
Tôi có thể thay đổi trực tiếp trên một nhánh từ xa không?
Không. Việc thay đổi trên một nhánh Git được thực hiện bằng cách trước tiên tạo bản sao cục bộ của nhánh như đã nêu ở trên, rồi tạo các commit đại diện cho những thay đổi mong muốn.
Làm sao tôi cập nhật nhánh cục bộ với các thay đổi mới nhất từ remote?
Để cập nhật nhánh cục bộ với các thay đổi mới nhất từ nhánh từ xa tương ứng, ta thường dùng lệnh git pull:
git pull origin <branch_name>
Lệnh này thực hiện cả git fetch và git merge để cập nhật nhánh cục bộ. Như đã tìm hiểu, git fetch cập nhật kho cục bộ với phiên bản từ xa mới nhất. Lệnh git merge sẽ trộn các thay đổi đó vào nhánh cục bộ của chúng ta. Để biết thêm chi tiết, xem hướng dẫn Git push và pull này.
Tôi gặp lỗi: "remote branch not found." Sửa thế nào?
Lỗi này cho biết nhánh không tồn tại trong bản sao kho mã cục bộ của chúng ta. Vậy có thể:
- Nhánh không tồn tại, có thể do gõ sai tên nhánh hoặc đó là nhánh cũ đã bị xóa.
- Kho mã cục bộ chưa được cập nhật. Như đã nêu ở trên, chúng ta có thể cập nhật bằng
git fetch.

Khi cần làm việc trên một nhánh trong kho mã từ xa, như nhánh công việc của đồng nghiệp hoặc nhánh tính năng mới, chúng ta gặp bài toán truy cập và cập nhật nhánh đó trên máy cục bộ.
May mắn là Git đơn giản hóa quy trình này bằng cách cung cấp các lệnh rõ ràng để tạo một bản sao cục bộ của nhánh từ xa. Nhờ đó chúng ta có thể chuyển sang nhánh mong muốn, đóng góp và cộng tác hiệu quả với nhóm.
Câu trả lời nhanh: để checkout một nhánh tên
<branch_name>, chạy:Trong bài viết này, chúng ta sẽ tìm hiểu các lệnh trên và cách chúng hoạt động chi tiết hơn.
Quy trình hai bước:
git fetchvàgit checkoutĐể bắt đầu làm việc trên một nhánh từ xa ở máy cục bộ, trước hết chúng ta cần đảm bảo kho mã cục bộ đồng bộ với kho mã từ xa. Sau đó, ta có thể tạo bản sao cục bộ và bắt đầu làm việc trên nhánh đó.
Cập nhật kho mã cục bộ
Để cập nhật kho mã cục bộ, chúng ta dùng
lệnh git fetch. Ở dạng đơn giản nhất, lệnh này không cần tham số:Khi dùng không tham số, lệnh git fetch sẽ lấy tất cả các nhánh từ kho mã từ xa mặc định. Điều này bao gồm cả nhánh ta muốn, nhưng cũng sẽ chiếm nhiều dung lượng đĩa cục bộ hơn.
Nếu lo ngại dung lượng đĩa, ta có thể chỉ định nhánh muốn fetch bằng cách truyền tên nhánh làm tham số cho lệnh:
Thay
<branch_name>bằng tên nhánh mong muốn. Tham sốoriginchỉ tên kho mã từ xa. Theo mặc định, khi chúng ta clone một kho, remote sẽ có tên là origin.Lưu ý rằng việc cập nhật tham chiếu remote bằng fetch sẽ không ảnh hưởng tới bất kỳ tệp cục bộ nào hay gây xung đột. Ở máy cục bộ có hai thực thể riêng biệt:
Những thay đổi và commit hiện tại của chúng ta nằm trong thư mục làm việc hiện tại. Đây là các tệp chúng ta thấy khi mở thư mục kho trên máy. Chúng không được cập nhật bởi git fetch. Chỉ kho mã cục bộ được cập nhật, có thể coi như một bản sao ẩn của kho mã từ xa trên máy của chúng ta.
Checkout một nhánh từ xa
Khi đã có bản cập nhật mới nhất của kho mã từ xa, chúng ta có thể tạo bản sao cục bộ của một nhánh từ xa bằng lệnh
git checkout:Thay
<branch_name>bằng tên nhánh từ xa mong muốn. Tham số đầu sau-blà tên muốn đặt cho nhánh cục bộ. Theo thông lệ, ta dùng cùng tên cho cả hai, nhưng có thể dùng tên khác miễn là chưa có nhánh cục bộ nào trùng tên đó:Sau khi chạy lệnh này thành công, Git sẽ chuyển thư mục làm việc hiện tại sang nhánh đó, và chúng ta sẵn sàng bắt đầu làm việc.
git checkoutso vớigit switchLệnh
git checkoutđã tồn tại từ khi Git ra đời. Phạm vi của nó vượt xa việc tạo bản sao cục bộ của nhánh hay chuyển đổi giữa các nhánh. Chẳng hạn, nó có thể lấy các tệp cụ thể từ kho mã từ xa.Trong các phiên bản Git gần đây, lệnh
git switchđược tạo ra với mục đích duy nhất là tạo bản sao cục bộ của các nhánh từ xa và chuyển đổi giữa các nhánh cục bộ.Tôi khuyến nghị dùng
git switchthay chogit checkoutvì khả năng mở rộng củagit checkoutđôi khi có thể dẫn đến lỗi.Để học cách thực hiện các thao tác tương tự như trong bài này bằng
git switch, bạn có thể đọc hướng dẫn sau: Git Switch Branch: Hướng dẫn với ví dụ thực tiễn.Kết luận
Tạo một bản sao cục bộ của nhánh Git từ xa là rất quan trọng để cộng tác. Bằng cách dùng
git fetchvàgit checkout, chúng ta có thể cập nhật kho mã cục bộ với các thay đổi từ xa và chuyển sang nhánh mong muốn.Mặc dù
git checkoutcổ điển cung cấp chức năng mạnh mẽ, lệnhgit switchmới hơn mang đến một lựa chọn gọn nhẹ chuyên cho quản lý nhánh, giảm rủi ro lỗi.