2013-08-05 34 views
16

Tôi đang làm việc trên một nhánh trong git. Khi tôi làm"git checkout <commit id>" đang thay đổi chi nhánh thành "không có chi nhánh"

git checkout <commit id> 

(cam kết id thu được từ git log), nó là nhận được cam kết rằng thay đổi cụ thể nhưng chi nhánh được thay đổi để <No-branch>.

Tại sao điều này lại xảy ra? Làm thế nào để bạn giải quyết điều này?

+1

Tôi không nhận được câu hỏi của bạn, bạn có thể vui lòng dán chuỗi lệnh và đầu ra không? – ssedano

+0

Nếu bạn kiểm tra một cam kết bạn không phải trên bất kỳ chi nhánh nữa (bởi vì bạn đã nói với Git bạn muốn được trên một cam kết) – knittl

+0

có thể trùng lặp của [Làm thế nào để sửa chữa một đầu Git tách ra?] (Http://stackoverflow.com/questions/10228760/how-to-fix-a-git-tách đầu) và [Tại sao git tách đầu của tôi?] (Http://stackoverflow.com/questions/3965676/why-did-git-detach-my- cái đầu). –

Trả lời

27

Nếu bạn checkout một cam kết trực tiếp, nó sẽ đưa bạn vào trạng thái "tách rời", về cơ bản chỉ có nghĩa là bản sao hiện tại mà bản sao làm việc của bạn đã kiểm tra, không có chi nhánh.

Nếu bạn chưa thực hiện bất kỳ cam kết nào, bạn có thể để tình trạng đầu tách ra bằng cách đơn giản kiểm tra ra bất cứ chi nhánh bạn đã truy cập trước kiểm tra ra các sha cam kết:

git checkout <branch> 

Nếu bạn đã thực hiện cam kết trong khi bạn được trong tình trạng đầu tách ra, bạn có thể lưu công việc của bạn đơn giản bằng cách gắn một chi nhánh trước khi hoặc trong khi bạn rời khỏi nhà nước đầu tách ra:

# Checkout a new branch at current detached head state: 
git checkout -b newBranch 

bạn có thể đọc thêm về detached head state at the official Linux Kernel Git docs for checkout.

0

Cam kết đó có thuộc nhánh khác không? Git checkout <commitid> sẽ chuyển sang nhánh khác nếu cam kết đã xảy ra ở chi nhánh khác. Bạn sẽ muốn kết hợp các thay đổi với chi nhánh đầu tiên của bạn nếu bạn muốn mã ở đó.

1

Nếu bạn là chi nhánh master và bạn làm một git checkout <SHA>

Tôi khá chắc chắn rằng điều này gây ra git để tải rằng cam kết trong tình trạng detached, thay đổi bạn ra khỏi chi nhánh hiện hành.

Nếu bạn muốn thực hiện thay đổi, bạn có thể thực hiện git checkout -b <mynewbranch> để tạo chi nhánh mới dựa trên cam kết đó và mọi thay đổi bạn đã thực hiện.

19

Bằng cách kiểm tra một trong các cam kết trong lịch sử bạn đang di chuyển git của bạn vào cái gọi là 'trạng thái tách ra', trông giống như không phải là những gì bạn muốn. Sử dụng lệnh này để tạo chi nhánh mới trên một trong các cam kết từ lịch sử:

git checkout -b <new_branch_name> <SHA1> 
Các vấn đề liên quan