2012-06-29 33 views
145

Tôi đã có một chi nhánh chính tại địa phương theo dõi nhánh chính từ xa của dự án github. Bây giờ, một cộng tác viên của tôi đã tạo ra một chi nhánh mới trong cùng một dự án, và tôi muốn làm như sau cho phù hợp:Theo dõi nhánh từ xa mới được tạo trên GitHub

  1. tạo ra một chi nhánh mới tại địa phương
  2. làm chi nhánh mới này theo dõi mới được tạo ra chi nhánh ở xa.

Tôi nên làm như thế nào?

+1

git checkout --track -b / cũng hoạt động. – MLister

+10

... hoặc chỉ 'git checkout -t /'.Nếu chỉ có một nhánh theo dõi từ xa kết thúc bằng '' bạn thậm chí có thể thực hiện 'git checkout ' và git đoán ý bạn là gì. –

+0

Xem thêm [Làm thế nào để bạn tạo một nhánh Git hiện có theo dõi một nhánh từ xa?] (Http://stackoverflow.com/q/520650/456814). –

Trả lời

196
git fetch 
git branch --track branch-name origin/branch-name 

Lệnh đầu tiên đảm bảo bạn có nhánh từ xa trong kho lưu trữ cục bộ. Lệnh thứ hai tạo ra nhánh địa phương theo dõi nhánh từ xa. Nó giả định rằng tên từ xa của bạn là origin và tên chi nhánh là branch-name.

--track tùy chọn được bật theo mặc định cho các ngành từ xa và bạn có thể bỏ qua nó.

+3

Khi tôi làm điều này, tôi nhận được một cảnh báo: refname 'branch-name' là mơ hồ. – Ultrasaurus

+14

Nếu chỉ có một chi nhánh từ xa với tên chi nhánh đó, bạn chỉ có thể thực hiện 'git checkout ' và git sẽ tự động kiểm tra và thiết lập chi nhánh theo dõi. Chỉ muốn nhắc lại những gì @Mark Longair đã nói ở trên trong nhận xét này: http://stackoverflow.com/questions/11262703/how-to-track-a-new-remote-branch-created-on-github#comment14806580_11262703. –

+0

Tên của nhánh từ xa của tôi là 'remote/origin/develop'? Không phải nó chỉ là 'origin/develop'? Những thứ này có giống nhau không? –

5

Khi chi nhánh không phải là chi nhánh từ xa, bạn có thể đẩy chi nhánh địa phương của bạn trực tiếp đến điều khiển từ xa.

git checkout master 
git push origin master 

hoặc khi bạn có một chi nhánh dev

git checkout dev 
git push origin dev 

hoặc khi chi nhánh từ xa tồn tại

git branch dev -t origin/dev 

Có một số posibilites khác để đẩy một chi nhánh từ xa.

+0

cảm ơn. Nhưng tôi không nghĩ rằng tôi muốn 'đẩy một nhánh xa' ở đây ... – MLister

+0

Sau đó, bạn chọn tùy chọn thứ ba. Khi nhánh từ xa tồn tại, bạn có thể tạo một nhánh địa phương và theo dõi nhánh từ xa :) giống với phiên bản từ tối đa nhưng ngắn hơn. – Stony

26

Trước hết bạn phải lấy kho từ xa:

git fetch remoteName 

hơn bạn có thể tạo các chi nhánh mới và thiết lập nó để theo dõi các chi nhánh ở xa bạn muốn:

git checkout -b newLocalBranch remoteName/remoteBranch 

Bạn có thể cũng sử dụng "git branch --track" thay vì "git checkout -b" như được chỉ định tối đa.

git branch --track newLocalBranch remoteName/remoteBranch 
+0

Nếu bạn thực hiện 'checkout -b' bằng cách sử dụng nhánh từ xa làm điểm bắt đầu, thì thực sự không cần thiết để sử dụng' --track'. –

+5

Ngoài ra, như được nêu trong [bình luận này] (http://stackoverflow.com/questions/11262703/how-to-track-a-new-remote-branch-created-on-github#comment32122710_11262780), nếu bạn chỉ làm 'git checkout ', và có một nhánh từ xa có cùng tên (sau khi bạn đã thực hiện 'git fetch'), thì nhánh địa phương sẽ tự động được thiết lập để theo dõi từ xa. –

23

Nếu bạn không có một chi nhánh địa phương hiện có, nó thực sự là đơn giản như:

git fetch 
git checkout <remote-branch-name> 

Ví dụ nếu bạn lấy và có một chi nhánh theo dõi từ xa mới gọi là origin/feature/Main_Page, chỉ cần làm này:

git checkout feature/Main_Page 

Điều này tạo ra một chi nhánh địa phương có cùng tên với nhánh từ xa, theo dõi nhánh từ xa đó. Nếu bạn có nhiều điều khiển từ xa với tên chi nhánh tương tự, bạn có thể sử dụng ít mơ hồ:

git checkout -t <remote>/<remote-branch-name> 

Nếu bạn đã thực hiện các chi nhánh địa phương và không muốn xóa nó, xem How do you make an existing Git branch track a remote branch?.

+0

'git checkout 1.5-branch' (' remote/upstream/1.5-branch' nằm trong đầu ra của 'git branch -a') dẫn đến' error: pathspec '1.5-branch' không khớp với bất kỳ tệp nào đã biết để git.' Thay đổi điều này thành 'git checkout upstream/1.5-branch' kết quả trong HEAD tách rời và không có nhánh cục bộ nào được tạo ra. Tôi nghĩ phần này của câu trả lời đơn giản là sai. Điều này là với git 2.4.3 –

+0

Lệnh đầu tiên làm việc cho tôi đối với tôi trong git 1.9.3, ngay cả đối với các điều khiển từ xa khác nhau. Có thể hành vi này đã thay đổi. Kết quả của lệnh thứ hai của bạn là những gì tôi mong đợi. Nếu không có -t, bạn không xác định rằng bạn muốn làm bất cứ điều gì khác ngoài việc nhìn vào phiên bản cụ thể đó trên điều khiển từ xa. – kotoole

+1

Tôi đồng ý với @PiotrDobrogost, tôi tin rằng tuyên bố của bạn "Điều này tạo ra một chi nhánh địa phương có cùng tên ..." là nhầm lẫn. Việc tìm nạp * sẽ * làm gì (khi được gọi theo cách này) là tạo một * nhánh theo dõi từ xa * cho mỗi nhánh trên điều khiển từ xa. Điều đó có nghĩa là một chi nhánh trên repo địa phương của bạn có tên là '/ '. Chi nhánh theo dõi từ xa là chỉ đọc, cho biết nhánh đó ở đâu trên điều khiển từ xa khi tìm nạp lần cuối. Gọi 'checkout' trên ref nhánh đó đặt bạn vào chế độ HEAD tách rời, giống như Piotr nói. Lưu ý rằng chỉ định nhánh từ xa để tìm nạp tránh tạo các nhánh theo dõi từ xa không mong muốn. – scanny

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