Câu hỏi Làm cho nhánh Git hiện có theo dõi nhánh từ xa?


Tôi biết cách tạo một nhánh mới theo dõi các nhánh từ xa, nhưng làm cách nào để tạo một nhánh hiện có theo dõi một nhánh từ xa?

Tôi biết tôi có thể chỉnh sửa .git/config nhưng có vẻ như có một cách dễ dàng hơn.


3080
2018-02-06 15:14


gốc


Như được lưu ý bên dưới, đối với một chi nhánh hiện có, bạn có thể sử dụng git push -u origin branch-name. - Zags
Để tham khảo, các git branch tài liệu.
Nếu nhánh địa phương là nhánh hiện tại và nhánh địa phương chưa theo dõi một điều khiển từ xa, git pull thường sẽ cung cấp thông điệp hữu ích về lệnh thích hợp để đặt thông tin theo dõi - billrichards
Thật khó chịu khi một người đang học git để được hiển thị một liên kết đến tài liệu git. Tài liệu đó dường như được viết cho những người đã biết họ đang làm gì với git. - Felipe Alvarez
như của Git 2.10, trước tiên bạn nên thanh toán cho chi nhánh địa phương dự định và sau đó thực hiện việc này git branch --set-upstream-to origin/<branch> - Mahdi Javaheri


Các câu trả lời:


Cho một chi nhánh foo và điều khiển từ xa upstream:

Kể từ Git 1.8.0:

git branch -u upstream/foo

Hoặc, nếu chi nhánh địa phương foo không phải là nhánh hiện tại:

git branch -u upstream/foo foo

Hoặc, nếu bạn muốn nhập các lệnh dài hơn, các lệnh này tương đương với hai lệnh trên:

git branch --set-upstream-to=upstream/foo

git branch --set-upstream-to=upstream/foo foo

Kể từ Git 1.7.0:

git branch --set-upstream foo upstream/foo

Ghi chú:

Tất cả các lệnh trên sẽ gây ra chi nhánh địa phương foo theo dõi nhánh từ xa foo từ xa upstream. Cú pháp cũ (1.7.x) không còn được dùng để ủng hộ cú pháp mới (1.8+). Cú pháp mới nhằm mục đích trực quan và dễ nhớ hơn.


Xem thêm: Tại sao tôi cần phải làm `--set-upstream` mọi lúc?


3752
2018-02-18 03:06



Là "thượng lưu" tên của điều khiển từ xa? tức là những gì hầu hết sẽ gọi là "nguồn gốc" theo mặc định? - Andrew Vit
@Andrew: Vâng. git branch --set-upstream master origin/master sẽ tương đương với những gì được tự động thực hiện khi ban đầu bạn sao chép một kho lưu trữ. - Dan Moulding
Trên một lưu ý liên quan, thêm điều này vào gitconfig của bạn là tuyệt vời: "[đẩy] mặc định = theo dõi" điều này sẽ làm cho nó để đẩy sẽ đi cùng một nơi mà kéo đến từ :) - jpswain
Tôi bị "gây tử vong: Không phải tên đối tượng hợp lệ: 'origin / master'." - joachim
git push -u origin foo  thông qua - Cotton


Bạn có thể làm như sau (giả sử bạn được kiểm tra trên master và muốn đẩy đến một master branch từ xa):

Thiết lập 'từ xa' nếu bạn chưa có

git remote add origin ssh://...

Giờ hãy định cấu hình chính để biết để theo dõi:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

Và đẩy:

git push origin master

206
2018-03-09 08:50



nó thực sự là cần thiết từ xa và các chi nhánh trong đẩy? Ý tôi là, bạn chỉ cần nó nếu chi nhánh bạn đã kiểm tra không phải là chi nhánh bạn muốn đẩy, đúng không? - Doppelganger
Có - nhưng từ bộ nhớ bạn có thể cần phải rõ ràng cho lần đẩy đầu tiên. Có thể dễ dàng được kiểm tra tất nhiên ... :) - Paul Hedderly
+1 Đây là câu trả lời cho người dùng Windows bị kẹt với bản xem trước "msysgit" trước 1.8. Cảm ơn vì điều đó. - John
Đây là câu trả lời duy nhất có hiệu quả đối với tôi. Khi tôi thử câu trả lời được chấp nhận, để thiết lập điều khiển từ xa ngược dòng cho một nhánh hiện có, tôi nhận được: error: the requested upstream branch 'upstream/master' does not exist. - Steve K
@SteveK đó rất có thể là do thượng lưu của bạn được gọi là originvà không upstream. - umläute


Tôi làm điều này như là một tác dụng phụ của việc đẩy với -u tùy chọn như trong

$ git push -u origin branch-name

Tùy chọn dài tương đương là --set-upstream.

Các git-branch lệnh cũng hiểu --set-upstream, nhưng việc sử dụng nó có thể gây nhầm lẫn. Phiên bản 1.8.0 sửa đổi giao diện.

git branch --set-upstream không được chấp nhận và có thể bị xóa trong một tương lai tương đối xa. git branch [-u|--set-upstream-to] đã được giới thiệu với một thứ tự san bằng các đối số.

Thật là hấp dẫn khi nói git branch --set-upstream origin/master, nhưng điều đó bảo Git phải sắp xếp nhánh "origin / master" địa phương để tích hợp với nhánh hiện đã được kiểm tra, điều này rất khó xảy ra với người dùng. Tùy chọn không được chấp nhận; sử dụng mới --set-upstream-to (với một cái ngắn và ngọt -u) để thay thế.

Giả sử bạn có một địa phương foo chi nhánh và muốn nó để xử lý các chi nhánh bằng tên giống như thượng nguồn của nó. Làm điều này xảy ra với

$ git branch foo
$ git branch --set-upstream-to=origin/foo

hoặc chỉ

$ git branch --set-upstream-to=origin/foo foo

130
2017-10-02 16:24



Đây là một giải pháp tốt hơn nhiều imo - Nils_e


Bạn có thể tìm thấy git_remote_branch công cụ hữu ích. Nó cung cấp các lệnh đơn giản để tạo, xuất bản, xóa, theo dõi và đổi tên các nhánh từ xa. Một tính năng thú vị là bạn có thể hỏi grb lệnh để giải thích lệnh git nào sẽ thực thi.

grb explain create my_branch github
# git_remote_branch version 0.3.0

# List of operations to do to create a new remote branch and track it locally:
git push github master:refs/heads/my_branch
git fetch github
git branch --track my_branch github/my_branch
git checkout my_branch

51
2018-02-06 17:11



Là grb một lệnh tiêu chuẩn? Có sẵn trong gói nào? - Jaseem
grb là đá quý ruby ​​có thể được truy cập như được giải thích trên github của họ - mcabrams
OP đang đặt câu hỏi về chính Git. Vì vậy, không giới thiệu một công cụ mới có lẽ sẽ tốt hơn. - zeekvfu
grb là một bí danh cho git-rebase trên cài đặt macOS của tôi. Tôi đã không làm điều này :) - highmaintenance


Trên thực tế cho câu trả lời được chấp nhận để làm việc:

git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR:
git branch --set-upstream qa upstream/qa

49
2017-11-23 12:08



Chi nhánh địa phương đã theo dõi một chi nhánh, vì vậy chúng tôi có thể giả định repo từ xa đã được thêm vào. - Doppelganger
Dopplerganger: Xem nhận xét của joachim về câu trả lời được chấp nhận. Dù giả định nào cũng khác nhau - điều gì khiến mọi thứ trở nên thú vị;) - Hedgehog


Tôi tin rằng vào đầu Git 1.5.x bạn có thể tạo ra một chi nhánh địa phương $BRANCH theo dõi một nhánh từ xa origin/$BRANCH, như thế này.

Cho rằng $BRANCH và origin/$BRANCH tồn tại, và bạn hiện chưa kiểm tra $BRANCH (chuyển đi nếu bạn có), làm:

git branch -f --track $BRANCH origin/$BRANCH

Điều này tái tạo $BRANCH như một nhánh theo dõi. Các -f buộc tạo ra mặc dù $BRANCH hiện đã có. --track là tùy chọn nếu mặc định thông thường được đặt đúng chỗ (có nghĩa là tham số git-config branch.autosetupmerge là đúng).

Lưu ý, nếu origin/$BRANCH chưa tồn tại, bạn có thể tạo nó bằng cách đẩy địa phương của bạn $BRANCH vào kho lưu trữ từ xa với:

git push origin $BRANCH

Tiếp theo là lệnh trước đó để quảng bá nhánh địa phương thành một nhánh theo dõi.


40
2017-07-28 09:33



git push origin $BRANCH là những gì tôi đang tìm kiếm. - User
Sau khi thử tất cả các loại giải pháp, bao gồm thiết lập một luồng ngược dòng như mô tả ở trên, không có gì hoạt động. Tất cả tôi muốn làm là kéo 1 cam kết mới vào chi nhánh địa phương của tôi từ một từ xa và tôi đã không thiết lập theo dõi ban đầu. Lệnh git branch -f --track $BRANCH origin/$BRANCH không lừa. - DemitryT


1- cập nhật siêu dữ liệu cục bộ của bạn bằng cách sử dụng: git fetch --all

enter image description here

2- hiển thị các nhánh từ xa và địa phương của bạn bằng cách sử dụng: git branch -a , xem Ảnh chụp màn hình sau

enter image description here

3 - chuyển sang nhánh đích, mà bạn muốn liên kết với remote: using

git checkout branchName

thí dụ :

enter image description here 

4- Liên kết chi nhánh địa phương của bạn với một nhánh từ xa bằng cách sử dụng:

git branch --set-upstream-to nameOfRemoteBranch

N.B: nameOfRemoteBranch : để sao chép từ đầu ra của bước 2 "git branch -r"

Ví dụ sử dụng:

enter image description here


28
2018-06-06 14:21



Nó đã làm việc. Cảm ơn bạn - Rahal Kanishka
Câu trả lời dễ dàng và đơn giản nhất. - vibs2006


Đảm bảo bạn chạy:

git config push.default tracking

để có thể đẩy rắc rối miễn phí


22
2017-08-29 21:38



Điều này có thể thuận tiện. Tuy nhiên, chúng tôi có thể lưu ý rằng theo git-config(1) trang thủ công, tracking không đồng nghĩa với từ đồng nghĩa của upstream. - FooF


Chỉnh sửa .git/config có lẽ là cách dễ nhất và nhanh nhất. Đó là những gì các lệnh Git để xử lý các nhánh từ xa đang làm.

Nếu bạn không muốn muck với các tập tin bằng tay (và nó không phải là khó để làm), bạn luôn có thể sử dụng git config để làm điều đó ... nhưng một lần nữa, đó chỉ là chỉnh sửa .git/config tập tin, anyway.

Có, tất nhiên, cách để tự động theo dõi một chi nhánh từ xa khi sử dụng git checkout (bằng cách vượt qua --track cờ, ví dụ), nhưng các lệnh này hoạt động với Mới các chi nhánh, không phải chi nhánh hiện có.


21
2018-02-06 15:17





Trong rất ngắn

git branch --set-upstream yourLocalBranchName origin/develop

Điều này sẽ làm cho bạn yourLocalBranchName theo dõi nhánh từ xa được gọi là develop.


16
2017-10-09 07:19



@Quincy Check câu trả lời của greg - sử dụng git push -u origin branch (hoặc là --set-upstream-to) thay thế - Tobias Kienzler
@MadNik, sự khác biệt giữa --set-upstream và --track? Tôi không hoàn toàn hiểu tại sao tôi nên sử dụng cái này qua cái kia. - A-B-B