2012-09-21 9 views
12

tôi đã dạy rằng bạn có thể đẩy tới và kéo từ một chi nhánh từ xa phù hợp với tên của chi nhánh Git hiện tại của bạn bằng cách thực hiện:Git kéo nguồn gốc ĐẦU

git push origin HEAD 

hoặc

git pull origin HEAD 

của nó luôn luôn làm việc đối với tôi trước đây, nhưng thỉnh thoảng nó không hoạt động, thay vì trì hoãn việc kéo/kéo từ chi nhánh master thay vì (làm cho việc hợp nhất trên pull ... không phải cái tôi muốn làm). Tôi biết rằng bạn có thể dễ dàng đẩy/kéo từ chi nhánh bạn đang truy cập bằng cách đơn giản bằng cách sử dụng tên của chi nhánh như:

git pull origin name-of-branch-i-want-to-pull-from 

Dù sao:

  1. Có một số lý do mà các HEAD là mất theo dõi/không chỉ đến nhánh hiện tại của tôi, giống như nó hầu như luôn luôn làm gì?
  2. Có cách nào để đẩy/kéo đến nhánh mà tôi hiện đang làm việc không (miễn là tên của chi nhánh từ xa khớp) mà không đặt tên chi nhánh một cách rõ ràng trong lệnh?

Trả lời

2

Nhờ một số trợ giúp nghiêm trọng của @abackstrom, tôi đã có thể khắc phục sự cố của mình. Về cơ bản, bài này là vấn đề của tôi, và giải pháp:

Git branch named origin/HEAD -> origin/master

Lệnh chính xác để "tái tạo"/theo dõi một TRỤ địa phương chi nhánh/con trỏ một cách chính xác là:

git remote set-head origin -a 

Tôi hy vọng điều này sẽ giúp bất kỳ ai khác gặp sự cố này.

4

HEAD không thực sự là chi nhánh. Đó là con trỏ tới cam kết mà bạn hiện đã kiểm tra và thường tham chiếu đến chi nhánh, nhưng nếu bạn làm một cái gì đó như git checkout <sha> hoặc git checkout <tag>, thì HEAD tham chiếu một cam kết trực tiếp, không có liên kết với chi nhánh - được gọi là "tách rời HEAD "trạng thái" và bạn thường nhận được cảnh báo từ git checkout khi bạn nhập trạng thái như vậy. Trong trạng thái đó, cố gắng đẩy/kéo HEAD không có ý nghĩa, vì bạn không ở trên nhánh.

+1

Vâng, điều đó hoàn toàn hợp lý, bởi vì sau đó bạn đang theo dõi một chi nhánh không phải là chi nhánh, nhưng đó không phải là những gì đang xảy ra ở đây. Thay vào đó, tôi hiện đang theo dõi một chi nhánh (ví dụ như 'patch'), tôi cam kết, và sau đó tôi: 'git push origin HEAD' và nó đẩy đến nguồn gốc/master Nó cũng xảy ra khi kéo. Lạ thật. – Rican7