2014-09-04 13 views
10

Tôi đã cố gắng để làm theo hướng dẫn từ Git: "Not currently on any branch." Is there an easy way to get back on a branch, while keeping the changes? nhưng git checkout dường như bị phá vỡ:Tại sao Git cho tôi biết "Hiện không phải trên bất kỳ chi nhánh nào" sau khi tôi chạy "git checkout origin/<branch>"?

$ git checkout origin/web-zach 
HEAD is now at 1366cb1... Changed so css files not ignored 

$ git status 
# Not currently on any branch. 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#  .cordova/config.xml 
#  www/languages/pt/sounds/ 
nothing added to commit but untracked files present (use "git add" to track) 

Cụ thể hơn, tôi lo lắng về thông báo "Not hiện trên bất kỳ chi nhánh" tin nhắn. git checkout dường như không làm bất cứ điều gì ở đây ... Không phải là toàn bộ mục đích của lệnh đó để đưa tôi vào một chi nhánh? Làm thế nào tôi có thể trở lại trên một chi nhánh và cam kết/đẩy một lần nữa?

+0

gì bạn muốn thanh toán chi nhánh?Khi bạn tham khảo "thay đổi", bạn có nghĩa là các tập tin không được theo dõi? –

+0

Tôi đang cố gắng chuyển sang nguồn gốc/web-zach và "thay đổi" trong câu hỏi khác (và trước đây trong câu hỏi của tôi trước khi tôi mất chúng - may mắn sao lưu chúng bằng dán-dán cũ) đã đề cập đến một số thay đổi mà tôi đã cố gắng cam kết. Tôi không thực sự quan tâm đến các tập tin không được bảo vệ, và có lẽ nên thêm chúng vào .gitignore của tôi. – hubatish

Trả lời

29

Đầu ra của git status cho biết rằng thư mục làm việc của bạn sạch; tốt.

Bây giờ, bằng cách chạy

git checkout origin/web-zach 

bạn đang cố gắng để kiểm tra một từ xa theo dõi chi nhánh, gọi origin/web-zach; đó là một loại chi nhánh đặc biệt, địa phương cho repo của bạn, theo dõi nhánh tương ứng, web-zach, sống trong kho lưu trữ từ xa được gọi là origin.

Tuy nhiên, HEAD tham khảo (mà bạn có thể nghĩ đến như một You-là-đây điểm đánh dấu trên bản đồ) không thể điểm đến một chi nhánh từ xa theo dõi; chỉ cho một chi nhánh địa phương "bình thường" hoặc cam kết trực tiếp. Khi bạn cố gắng để kiểm tra một theo dõi từ xa ngành, các HEAD tham khảo kết thúc chỉ trực tiếp tại mũi của chi nhánh từ xa theo dõi (tức là cam kết mà rằng từ xa theo dõi điểm chi nhánh):

enter image description here

Khi HEAD không trỏ đến một chi nhánh địa phương "bình thường", nhưng điểm đến một cam kết trực tiếp, bạn kết thúc trong cái gọi là "nhà nước tách ra-HEAD". Nó không phải là kết thúc của thế giới, nhưng tránh hạ cánh ở trạng thái đó càng nhiều càng tốt (ít nhất là vào lúc bắt đầu học Git của bạn) có thể sẽ khiến bạn ngạc nhiên.

Để khắc phục tình huống, bạn cần phải gắn lại HEAD cho một số chi nhánh địa phương. Ở đây, bạn có thể muốn tạo và kiểm tra một địa phương chi nhánh như vậy, bằng cách chạy, ví dụ

git checkout -b web-zach 

HEAD sau đó sẽ được chỉ tại chi nhánh địa phương mới được tạo ra gọi là web-zach:

enter image description here

Sau đó, bạn sẽ nhận được

$ git status 
On branch web-zach 
Untracked files: 
    (use "git add <file>..." to include in what will be committed) 
     .cordova/config.xml 
     www/languages/pt/sounds/ 
nothing added to commit but untracked files present (use "git add" to track) 

Sau đó, bạn sẽ được tự do để thực hiện thay đổi, giai đoạn đó, cam kết, và (nếu bạn có quyền ghi vào repo từ xa tương ứng với origin và không ai khác đã đẩy bất cứ điều gì để origin/web-zach kể từ lần cuối git fetch của bạn), push, sử dụng

git push -u origin web-zach 
+2

cảm ơn, điều này thực sự hữu ích! Tôi đã làm theo hướng dẫn của bạn và mọi thứ dường như đang hoạt động như bạn nói. Tôi đang trên web-chi nhánh địa phương - là nó không thể được "trên" các chi nhánh từ xa? – hubatish

+0

Không, bạn không thể kiểm tra 'origin/web-zach' như bạn muốn' web-zach'. Chúng là các loại cành khác nhau. Bạn có thể nghĩ về một nhánh theo dõi từ xa (chẳng hạn như 'origin/web-zach') như một mảnh kẻ thù trong trò chơi cờ vua: bạn có thể thấy mảnh đó ở đâu, nhưng bạn không được phép di chuyển nó. – Jubobs

+1

Cảm ơn bạn đã giải thích và giúp tôi đọc được http://git-scm.com/book/en/Git-Branching-Remote-Branches#Tracking-Branches Điều đó có ý nghĩa bây giờ – hubatish

Các vấn đề liên quan