2009-01-22 23 views
75

Tôi có kho lưu trữ trên github với nhánh chính (chính) và nhánh cho một số công việc thử nghiệm. Tôi đã thực hiện một số cam kết và đẩy đến nhánh thử nghiệm và mọi thứ đều ổn.git: chuyển nhánh mà không cần rời đầu

Bây giờ, trên một máy khác, tôi cố gắng sao chép kho của tôi (git clone kho) và sau đó chuyển sang chi nhánh thực nghiệm (git checkout BRANCHNAME) nhưng mỗi khi tôi làm đầu tôi này được tách ra và tôi không thể đẩy các thay đổi của tôi. Tôi đang làm gì sai? Tôi có cảm giác tôi đang thiếu một khái niệm cơ bản về git, nhưng đọc các trang người đàn ông git ngẫu nhiên không cho tôi bất kỳ manh mối nào.

Tôi mới đến git vì vậy tôi xin lỗi nếu tôi là một thằng ngốc nhưng tôi không thể tìm thấy bất cứ điều gì trong các tài liệu đó sẽ giúp tôi reattach đầu của tôi.

EDIT

Khái niệm về một chi nhánh theo dõi là những gì tôi đã mất tích. Bây giờ tôi đã rên khái niệm đó mọi thứ đều rõ ràng. Cá nhân, tôi tìm thấy cú pháp git branch --track trực quan hơn nhiều so với git checkout -b branch-name origin/branch-name.

Cảm ơn sự giúp đỡ!

Trả lời

88
# first time: make origin/branchname locally available as localname 
git checkout -b localname origin/branchname 

# othertimes 
git checkout localname 

git push origin 

Để thuận tiện, bạn có thể sử dụng cùng một chuỗi cho localname & BRANCHNAME
Khi bạn kiểm tra ra origin/branchname bạn đã không thực sự kiểm tra ra một chi nhánh. origin/branchname là một cái tên "từ xa", và bạn có thể nhận được một danh sách của họ với

branch -a 

Nếu bạn đã kích hoạt màu sắc, các chi nhánh địa phương sẽ là một màu sắc, và từ xa khác.

Trước tiên, bạn phải tạo một nhánh từ xa được theo dõi cục bộ để có thể chuyển sang và làm việc trên đó.

+5

Man, tại sao không "git checkout origin/branchname" bắt đầu theo dõi áo ngực nch tự động nếu nó chưa được theo dõi? –

+2

vì bạn vẫn cần tên địa phương cho chi nhánh nước ngoài. –

+0

Đây là những gì tôi đang làm và thông báo lỗi: $ git checkout -b topic/tìm nạp ngược dòng/chủ đề/tìm nạp gây tử vong: git checkout: cập nhật đường dẫn không tương thích với các nhánh chuyển đổi. Bạn có dự định thanh toán 'thượng nguồn/chủ đề/tìm nạp' không thể giải quyết dưới dạng cam kết không? – ulu

12
git clone [email protected]:abc/def.git 
cd def 

Bây giờ, tạo một chi nhánh theo dõi:

git branch --track experimental origin/experimental 
git checkout experimental 

Sau đó, sau khi làm việc ở đó, chỉ cần đẩy để github bởi

git push 
+3

git branch -t origin/testing # không cần phải nhập quá nhiều :) – Dustin

+0

Nhánh mà tôi muốn theo dõi được gọi là chủ đề/tìm nạp. Khi tôi đang cố gắng làm $ git branch --track topic/fetch upstream/topic/fetch nó nói, gây tử vong: Không phải là tên đối tượng hợp lệ: 'upstream/topic/fetch'. – ulu

+0

@Dustin, lệnh đó tạo ra một nhánh gốc 'thử nghiệm/nguồn gốc' để theo dõi tổng thể địa phương. Tôi đoán đó là một sai lầm khá phổ biến. – PDug

10

Mở rộng trên trả lời Kent, sau khi bạn làm bản sao của bạn chỉ chi nhánh bạn sẽ có (điều khiển từ xa không tính) là một trong đó đã được hoạt động trong kho bạn nhân bản từ - chủ trong trường hợp của bạn.

Vì vậy, trước tiên bạn sẽ muốn tạo một chi nhánh mới để theo dõi các chi nhánh thực nghiệm từ xa:

$ git branch experimental origin/experimental 

và sau đó kiểm tra xem nó ra:

$ git checkout experimental 

Tuy nhiên, Kent là đúng - hai lệnh này có thể được kết hợp

$ git checkout -b experimental origin/experimental 
Các vấn đề liên quan