Bất kỳ kiểm tra nào của một cam kết không phải là tên của một trong các chi nhánh của bạn sẽ giúp bạn có được một ĐẦU tách ra. Một SHA1 đại diện cho đầu của một nhánh vẫn cho một ĐẦU tách ra. Chỉ có một kiểm tra của một tên chi nhánh địa phương tránh chế độ đó.
Xem cam kết với một ĐẦU tách ra
Khi ĐẦU được tách ra, các cam kết hoạt động như bình thường, ngoại trừ không có nhánh nào được đặt tên được cập nhật. (Bạn có thể coi đây là một nhánh ẩn danh.)
Ví dụ: nếu bạn kiểm tra một "chi nhánh từ xa" mà không theo dõi nó trước, bạn có thể kết thúc với một ĐẦU tách rời.
Xem git: chuyển nhánh mà không tách đầu
Với Git 2.23 (tháng 8 năm 2019), bạn không phải sử dụng lệnh khó hiểugit checkout
nữa.
git switch
cũng có thể kiểm tra một chi nhánh và nhận được một tách rời, ngoại trừ:
- nó có một
--detach
tùy chọn rõ ràng
Để kiểm tra cam kết HEAD~3
kiểm tra tạm thời hoặc thử nghiệm mà không tạo chi nhánh mới:
git switch --detach HEAD~3
HEAD is now at 9fc9555312 Merge branch 'cc/shared-index-permbits'
- nó không thể tách ra do nhầm lẫn một nhánh theo dõi từ xa
Xem:
C:\Users\vonc\arepo>git checkout origin/master
Note: switching to 'origin/master'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
Vs sử dụng git switch
lệnh mới :
C:\Users\vonc\arepo>git switch origin/master
fatal: a branch is expected, got remote branch 'origin/master'
Nếu bạn muốn tạo một chi nhánh địa phương mới theo dõi một chi nhánh từ xa:
git switch <branch>
Nếu <branch>
không được tìm thấy nhưng có tồn tại một nhánh theo dõi trong chính xác một điều khiển từ xa (gọi nó <remote>
) với một tên phù hợp, hãy coi là tương đương với
git switch -c <branch> --track <remote>/<branch>
Không còn sai lầm nữa!
Không còn tách ra không mong muốn ĐẦU!
branch-name@{n}
, vị trí thứ n trước đóbranch-name
. Nhưng dù thế nào đi chăng nữa, đến một lúc nào đó cũng phải có mộtgit checkout <rev>
. Nếu điều đó không rung chuông, thì có lẽ bạn đã làm những gì Will đã đề cập - đã cố gắng thực hiệngit checkout <file>
và quản lý để chỉ định sửa đổi một cách tình cờ.