Hướng dẫn · 17/10/2026

Git detached HEAD: Xem phiên bản cũ và giữ lại thử nghiệm

Bạn muốn mở một bản phát hành cũ để kiểm tra lỗi, nhưng Git thông báo đang ở trạng thái detached HEAD. Đây không nhất thiết là sự cố: bạn có thể đang xem một commit trực tiếp, thay vì làm việc trên đầu một nhánh. Điều quan trọng là biết khi nào chỉ cần xem và khi nào cần tạo nhánh để giữ lại thử nghiệm.

Git detached HEAD: Xem phiên bản cũ và giữ lại thử nghiệm

Bạn muốn mở một bản phát hành cũ để kiểm tra lỗi, nhưng Git thông báo đang ở trạng thái detached HEAD. Đây không nhất thiết là sự cố: bạn có thể đang xem một commit trực tiếp, thay vì làm việc trên đầu một nhánh. Điều quan trọng là biết khi nào chỉ cần xem và khi nào cần tạo nhánh để giữ lại thử nghiệm.

1. Chuẩn bị trước khi đổi phiên bản

Ví dụ dưới đây giả định repository có nhánh main và tag v1.0.0. Thay hai tên này bằng tên thực tế trong dự án. Trước tiên, kiểm tra trạng thái và ghi lại nhánh đang làm việc:

git status --short
git branch --show-current
git log -1 --oneline

Nếu có thay đổi chưa commit, hãy xử lý chúng theo quy trình của dự án trước khi tiếp tục. Bài thực hành này bắt đầu với working tree sạch. Đừng thêm tùy chọn ép buộc chỉ để bỏ qua cảnh báo: việc đổi phiên bản có thể cập nhật cả file đang làm việc lẫn index.

2. Mở tag cũ để kiểm tra

git switch --detach v1.0.0
git status
git log -1 --oneline

HEAD lúc này trỏ trực tiếp tới commit của tag. Bạn có thể đọc mã nguồn và đối chiếu lỗi tại phiên bản đó mà không di chuyển nhánh main. Nếu chạy ứng dụng cũ, hãy dùng môi trường thử nghiệm và dữ liệu riêng; việc checkout mã nguồn không tự hoàn tác database, dependency đã cài hoặc cấu hình ngoài Git.

Khi chỉ cần xem, không sửa file và không tạo commit, bạn có thể quay lại nhánh ban đầu:

git switch main

3. Giữ thử nghiệm bằng một nhánh mới

Nếu đang ở detached HEAD và muốn phát triển tiếp, hãy tạo nhánh trước khi chỉnh sửa:

git switch -c experiment/legacy-check

Lệnh tạo nhánh tại HEAD hiện tại rồi chuyển sang nhánh đó. Nếu bạn đã tạo một hoặc vài commit trong trạng thái detached HEAD nhưng chưa rời đi, cách làm vẫn giống nhau: tạo nhánh ngay tại commit hiện tại để giữ một tên nhánh trỏ tới kết quả thử nghiệm.

Dùng tên nhánh mới chưa tồn tại. Không thay -c bằng -C cho tiện, vì tùy chọn viết hoa có thể đặt lại một nhánh đã có. Tạo nhánh cũng không đồng nghĩa với commit các thay đổi trong file; bạn vẫn cần kiểm tra diff, chọn file cần stage và commit theo quy trình bình thường.

4. Xác nhận trước khi quay lại công việc chính

git branch --show-current
git log -1 --oneline
git status --short

Kết quả đầu tiên phải là experiment/legacy-check. Kiểm tra commit mới nhất và bảo đảm không bỏ quên thay đổi chưa lưu. Khi working tree đã sạch, quay lại nhánh chính rồi kiểm tra nhánh thử nghiệm vẫn giữ commit mong muốn:

git switch main
git log -1 --oneline experiment/legacy-check

Nhánh mới chỉ tồn tại cục bộ cho đến khi bạn chủ động chia sẻ. Việc tạo nhánh không tự merge vào main, không tự push và không tự triển khai production.

5. Nếu đã rời commit thử nghiệm

Đừng tạo nhánh tại main rồi cho rằng thử nghiệm đã được giữ lại. Hãy dùng git reflog để tìm thao tác trước đó, kiểm tra đúng commit bằng git show, rồi mới tạo nhánh tại commit đã xác minh. Reflog là lịch sử tham chiếu cục bộ và không phải bản sao lưu lâu dài.

Thói quen dễ nhớ: kiểm tra trạng thái trước khi chuyển phiên bản, tạo nhánh ngay khi quyết định giữ thử nghiệm, và xác nhận commit trước khi rời đi.

Tài liệu tham khảo

Thảo luận

Bình luận 0

Đăng nhập để bình luận

Bạn cần có tài khoản để tham gia thảo luận và trả lời độc giả khác.

Đăng nhậpĐăng ký

Chưa có bình luận. Hãy là người đầu tiên chia sẻ ý kiến.