Theo dõi một nhánh từ xa mới được tạo trên GitHub


183

Tôi đã có một nhánh chính cục bộ theo dõi nhánh chính từ xa của một 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:

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

Làm thế nào tôi nên làm điều đó đúng?


2
kiểm tra git --track -b <nhánh cục bộ> <từ xa> / <nhánh được theo dõi> cũng hoạt động.
MLister

14
... Hoặc chỉ git checkout -t <remote>/<whatever>. Nếu chỉ có một nhánh theo dõi từ xa kết thúc, <whatever>bạn thậm chí có thể làm git checkout <whatever>và git đoán ý của bạn là gì.
Đánh dấu Longair

Câu trả lời:


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

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

--track tùy chọn được bật theo mặc định cho các chi nhá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: tên gọi 'tên chi nhánh' là mơ hồ.
Ultrasaurus

19
Nếu chỉ có một nhánh từ xa có tên chi nhánh đó, bạn chỉ cần làm git checkout <branchname>và git sẽ tự động kiểm tra và thiết lập một nhánh theo dõi. Chỉ muốn nhắc lại những gì @Mark Longair đã nói ở trên trong bình luận này: stackoverflow.com/questions/11262703/ .
Ryan Walls

Tên của chi nhánh từ xa của tôi là remotes/origin/develop? Không phải là nó nên origin/develop? Những cái này có giống nhau không?
ア レ ッ ク

2
Tôi phải làm git fetch --all, nếu không các chi nhánh mới sẽ không được tải xuống
mschatiof

Làm thế nào để làm điều này trong Eclipse? Khi tôi thực hiện xong những điều đó cmd, nhật thực sẽ phát hiện ra nhánh mới?
Deckard

31

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

git fetch
git checkout <remote-branch-name>

Chẳng hạn, nếu bạn tìm nạp và có một nhánh theo dõi từ xa mới được gọi origin/feature/Main_Page, chỉ cần làm điều này:

git checkout feature/Main_Page

Điều này tạo ra một nhánh cục bộ 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 có cùng tên chi nhánh, bạn có thể sử dụng ít mơ hồ hơn:

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

Nếu bạn đã tạo chi nhánh địa phương và không muốn xóa nó, hãy xem Làm thế nào để bạn tạo một chi nhánh Git hiện tại theo dõi một chi nhánh từ xa? .


1
git checkout 1.5-branch( remotes/upstream/1.5-branchnằm ở đầu ra của git branch -a) kết quả trong việc error: pathspec '1.5-branch' did not match any file(s) known to git.Thay đổi điều này thành git checkout upstream/1.5-branchkết quả trong tách ra và không có chi nhánh địa phương nào được tạo. Tôi nghĩ rằng phần này của câu trả lời đơn giản là sai. Đây là với git 2.4.3
Piotr Dobrogost

Lệnh đầu tiên hoạt động 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. 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 xem phiên bản cụ thể đó trên điều khiển từ xa.
kotoole

1
Tôi đồng tình 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 ..." bị 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 tên <remote>/<branch>. Một nhánh theo dõi từ xa là chỉ đọc, cho biết nhánh đó ở đâu trên điều khiển ở lần tìm nạp cuối cùng. Gọi checkoutvào chi nhánh đó sẽ đưa bạn vào chế độ CHÍNH, như Piotr nói. Lưu ý rằng việc 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

2
Để rõ ràng một lần nữa: Tôi đề nghị sử dụng lệnh git checkout feature-branch. Tôi KHÔNG đề nghị sử dụng lệnh git checkout origin/feature-branch mà cả hai bạn đã chỉ ra, sẽ dẫn đến một cái đầu tách rời không có ích.
kotoole

đơn giản hơn nhiều và đến điểm. Hoạt động tốt với git 2.8.3 trên cygwin.
Felipe Alvarez

29

Trước hết bạn phải tìm nạp kho từ xa:

git fetch remoteName

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

git checkout -b newLocalBranch remoteName/remoteBranch

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

git branch --track newLocalBranch remoteName/remoteBranch

Nếu bạn checkout -bsử dụng một nhánh từ xa làm điểm bắt đầu, thì thực sự không cần thiết phải sử dụng --track.

5
Ngoài ra, như đã chỉ ra trong nhận xét này , nếu bạn chỉ cần làm git checkout <branchname>và có một nhánh từ xa có cùng tên (sau khi bạn đã làm a git fetch), thì nhánh cục bộ sẽ tự động được thiết lập để theo dõi từ xa.

9

Khi chi nhánh không có chi nhánh từ xa, bạn có thể đẩy chi nhánh địa phương của mình 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 nhánh dev

git checkout dev
git push origin dev

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

git branch dev -t origin/dev

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


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 cục bộ và theo dõi nhánh từ xa :) giống như phiên bản từ max nhưng ngắn hơn.
René Höhle
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.