2011-09-27 21 views
27

Tôi đang cố tạo chi nhánh từ thẻ từ xa, nhưng có vẻ như không có cách nào để thực hiện. Khi tôi cố gắngCách thực hiện "git checkout -b <branchname>" từ thẻ từ xa

git checkout -b test origin/deploy 

nơi nguồn gốc là điều khiển từ xa và triển khai là thẻ tôi muốn kiểm tra, nhưng tôi nhận

fatal: git checkout: updating paths is incompatible with switching branches. 
Did you intend to checkout 'origin/deploy' which can not be resolved as commit? 

UPDATE: Tôi vừa mới phát hiện ra rằng

git fetch --all -t 

không hoạt động bình thường cho tôi. Trong khi nó tải xuống tất cả các chi nhánh, nó không tải xuống tất cả các thẻ, vì vậy khi tôi kiểm tra triển khai nó và thẻ cũ. Bây giờ tôi thực hiện

git fetch --all && git fetch -t 

Bằng cách này khi tôi tạo một chi nhánh mới dựa trên một thẻ

git checkout -b test deploy 

chi nhánh mới được cập nhật với các triển khai cuối cùng.

Trả lời

21

Tôi không phải là một guru git, nhưng tôi đã sử dụng một cái gì đó như thế này trước và nó dường như đã làm việc tốt:

git pull (or fetch, just need to make sure you are updated) 
git checkout -b test remotes/origin/deploy 
+0

tính năng này không hoạt động đối với tôi (MacOs X, remote được lưu trữ tại github) Tôi nhận được: fatal: Không thể cập nhật đường dẫn và chuyển sang nhánh '6.2.3-ga4' tại cùng một –

+1

Hãy chắc chắn rằng nhánh bạn đang cố gắng theo dõi tồn tại, tức là trước tiên hãy tìm kiếm git, hoặc git pull, hoặc git remote update, v.v. –

29

Tôi không chắc chắn bạn có thể thực hiện việc này trực tiếp. Có thể bạn đang mắc kẹt với việc tìm nạp và sau đó thanh toán:

git fetch origin 
git checkout -b test tag-name 

Nhân tiện, tôi không khuyên bạn nên sử dụng tên thẻ như "triển khai".

+0

Vâng, bây giờ tôi m luôn luôn làm "git fetch --all -t" trước khi thanh toán, nhưng trong một số trường hợp các chi nhánh được tạo từ thẻ dường như trỏ đến một triển khai cũ thay vì lần triển khai cuối cùng. BTW, tại sao bạn không sử dụng tên "triển khai"? – Sergi

+1

@Sergi, thẻ được dự định vẫn cố định, nhưng tên như "triển khai" ngụ ý bạn sẽ thay đổi thường xuyên. Tốt hơn nên sử dụng chi nhánh để gắn nhãn một dòng phát triển thay đổi theo thời gian và có thẻ của bạn là các phiên bản cụ thể, như "1.0". –

+0

@ Joost, oh, đừng lo lắng sau đó. Tôi luôn tạo hai thẻ khi triển khai, một thẻ có tên phiên bản và một tên khác được gọi là triển khai, được ghi đè mỗi khi tôi triển khai mới. Bằng cách này, các nhà phát triển còn lại có thể phân nhánh từ điểm tốt cuối cùng trên nhánh triển khai. Bất kỳ ý tưởng nào tại sao đôi khi tôi nhận được các nhánh trỏ đến và triển khai cũ? Có thể là "git fetch --all -t" không hoạt động như mong đợi? – Sergi

4

Bạn cần phải chạy

git pull 
git checkout -b <new-branch-name> remotes/origin/<source-branch-name> 
Các vấn đề liên quan