Nhận các nhánh git hiện có để theo dõi các nhánh từ xa


81

Quy trình làm việc thông thường của tôi khi làm việc với git, giống như sau:

  1. tạo một kho lưu trữ cục bộ
  2. thực hiện một số công việc trong kho lưu trữ đó, thêm / thay đổi tệp, v.v.
  3. quyết định rằng tôi muốn một vị trí từ xa trung tâm cho kho lưu trữ và tạo một
  4. đẩy tất cả các cam kết từ kho lưu trữ cục bộ của tôi sang kho lưu trữ từ xa mới này

Tuy nhiên, bây giờ tôi muốn có thể đến pushpullđi từ kho lưu trữ từ xa này mà không cần phải chỉ định nơi tôi đang đẩy đến hoặc kéo từ đâu; Tôi muốn chủ sở hữu địa phương của tôi theo dõi chủ từ xa.

Cách thích hợp để thực hiện điều này với tôi không rõ ràng và tôi không thể xác định nó từ tài liệu, mặc dù nó thực sự không nên có nhiều hơn một lệnh.

Bởi vì đó là điều chỉ được thực hiện một lần cho mỗi kho lưu trữ, tôi thường sử dụng một trong hai giải pháp đơn giản, nhưng khó hiểu:

  1. được sử dụng git cloneđể tạo một kho lưu trữ cục bộ mới và đã xóa kho lưu trữ cũ. Sau khi nhân bản git, kho lưu trữ mới được thiết lập để theo dõi nguồn gốc.
  2. .git / config được chỉnh sửa thủ công để tạo nguồn gốc bản chính.

Tôi nghĩ rằng tôi sẽ có thể chạy một lệnh, có thể là một số hình thức git remoteđể thiết lập một kho lưu trữ hiện có để có theo dõi chính một chủ từ xa. Bất cứ ai có thể cho tôi biết đó là lệnh gì?


Trên thực tế chỉ ra rằng một câu hỏi tương tự đã được hỏi trước: stackoverflow.com/questions/312055/...
SpoonMeiser

Đối với phiên bản git> = 1.7.0.0, bạn có thể thực hiện điều đó bằng một lệnh, nó được giải thích ở đây .
KiRPiCH

4
Đây thực sự là một bản sao của: stackoverflow.com/questions/520650/…
takehin vào

Câu trả lời:


155

Sử dụng lập luận ngược dòng:

git branch --set-upstream local-branch-name origin/remote-branch-name

Chạy lệnh trên sẽ cập nhật chính xác tệp .git / config của bạn và thậm chí xác minh bằng đầu ra này:

"Tên cục bộ chi nhánh được thiết lập để theo dõi chi nhánh từ xa tên chi nhánh từ xa từ nguồn gốc."

CHỈNH SỬA: Như martijn đã nói: "Trong phiên bản Git v1.8.0, --set-ngược dòng không được dùng nữa. Hãy sử dụng --set-ngược dòng-to để thay thế."

git branch --set-upstream-to local-branch-name origin/remote-branch-name

Xem điều này để biết thêm thông tin.


18
Trong phiên bản Git v1.8.0, --set-upstreamkhông được dùng nữa. Sử dụng --set-upstream-tothay thế.
Martijn

1
Sử dụng git remote show <remote>để xem những chi nhánh được theo dõi bởi các chi nhánh địa phương của bạn
naitsirch

1
Chỉnh sửa được đề xuất này lẽ ra không được chấp thuận, về cơ bản nó đã thay đổi câu trả lời (và để nó ở trạng thái không chính xác, vì các đối số cho tùy chọn mới bị đảo ngược). Hãy để người đăng ban đầu quyết định xem anh ta có muốn cập nhật câu trả lời của mình hay không.

1
Bạn cũng có thể đẩy chi nhánh một lần nữa vớigit push -u
mattr-

Không set upstreamthiết lập ánh xạ mà không thực sự đẩy lên bất kỳ mã nào? push buộc bạn phải đẩy mã để tạo ánh xạ. Có thể bạn chưa có mã, nhưng muốn thiết lập một ánh xạ?
user20358

19

git help remotesẽ cho bạn thấy những gì bạn cần biết. Tôi nghĩ những gì bạn muốn là

git remote add [remote-name] [remote-url]

# Set a local branch to follow the remote
git config branch.[branch-name].remote [remote-name]

# Set it to automatically merge with a specific remote branch when you pull
git config branch.[branch-name].merge [remote-master]

Bạn cũng có thể chỉnh sửa thủ công .git / config để thiết lập chúng.


Một tùy chọn khác là tạo kho lưu trữ trung tâm của bạn, sau đó xóa thư mục làm việc của bạn và tạo lại nó bằng cách nhân bản từ kho lưu trữ trung tâm. Tuy nhiên, việc chỉnh sửa .git / config sẽ có nhiều thông tin hơn.
William Pursell

nhân bản kho lưu trữ trung tâm và chỉnh sửa .git / config là hai tùy chọn tôi đã đề cập trong câu hỏi của mình.
SpoonMeiser

8

Bạn cũng có thể sử dụng điều này nếu bạn muốn tạo một chi nhánh cục bộ mới để theo dõi một chi nhánh từ xa:

git checkout --track -b [branch_name] --track origin[or other remote name]/[remote_branch_name] 

hoặc thậm chí tốt hơn:

git checkout -t origin/branch_name

git checkout --track -b branchname origin branchname death: git checkout: việc cập nhật đường dẫn không tương thích với việc chuyển đổi các chi nhánh. Bạn có ý định kiểm tra 'origin / branchname' mà không thể giải quyết như cam kết không?
edebill

6

Trên các phiên bản git mới hơn, bạn có thể sử dụng

git branch --track origin/branch_name

4
Bài đăng này đang được tự động gắn cờ là chất lượng thấp vì nó quá ngắn / chỉ có mã. Bạn có phiền mở rộng nó bằng cách thêm một số văn bản để giải thích cách nó giải quyết vấn đề không?
gung - Khôi phục Monica

Đây là câu trả lời chính xác nhất! Tất cả những điều trên là không chính xác hoặc không còn được hỗ trợgit branch --set-upstream BRANCH fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
GTodorov

3

The --set-upstream flag is deprecated and will be removed.

git branch master --set-upstream-to myupstream/master


1

Sau ba năm (xem những gì tôi đã làm ở đó :-)), tôi đã cố gắng kéo một nhánh chưa được kiểm soát bằng Git Bash và nhận được

If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream-to=origin/<branch> develop

Những điều sau đây đạt được những gì tôi cần:

$ git branch --set-upstream-to=origin/develop develop Branch 'develop' set up to track remote branch 'develop' from 'origin'.


-1

Sử dụng lệnh này:

git clone [<options>] [--] <repo> [<dir>]

Xin chào, bạn có thể muốn đọc lại câu hỏi - nó đề cập đến việc nhân bản lại kho lưu trữ, nhưng câu hỏi là về thời điểm kho lưu trữ cục bộ được tạo trước và ban đầu không theo dõi điều khiển từ xa.
SpoonMeiser
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.