a

Câu hỏi Git tìm nhánh từ xa


Đồng nghiệp của tôi và tôi đang làm việc trên cùng một kho lưu trữ mà chúng tôi đã phân nhánh nó thành hai nhánh mỗi kỹ thuật cho các dự án khác nhau, nhưng chúng có điểm tương đồng, vì vậy đôi khi chúng tôi muốn cam kết trở lại với chủ nhân từ chi nhánh.

Tuy nhiên, tôi có chi nhánh. Câu hỏi của tôi là, đồng nghiệp của tôi có thể kéo nhánh đó ra sao? A git clone của repo dường như không tạo ra các chi nhánh địa phương cho anh ta, mặc dù tôi có thể nhìn thấy chúng sống trên unfuddle sau khi đẩy vào cuối của tôi.

Ngoài ra, khi tôi thực hiện chi nhánh ban đầu, tôi đã làm -b checkout. Bạn không chắc chắn nếu điều đó tạo ra nhiều sự khác biệt?

iMac:test_solar dave$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master

git fetch origin discover
git checkout discover

Đây là những lệnh tôi đã chạy. Nhưng nó chắc chắn không hoạt động. Tôi muốn có thể kiểm tra chi nhánh đó và sau đó đẩy và cam kết chỉ các nhánh thay đổi từ các cộng tác viên hoặc máy trạm khác nhau.


1602
2018-03-02 17:06


gốc


có thể trùng lặp git checkout remote branch - Andrew Marshall
Tôi đã sử dụng: git fetch --all, Sau đó, để xem tất cả các nhánh: git branch, Sau đó tôi thanh toán chi nhánh: git checkout nameofnewbranch - Jeff Mattson
kiểm tra câu hỏi của bạn ans https://stackoverflow.com/questions/1072261/push-and-pull-branches-in-git/47780374#47780374 - Rizo


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


Bạn cần phải tạo một chi nhánh địa phương theo dõi một nhánh từ xa. Lệnh sau sẽ tạo một nhánh cục bộ có tên daves_branch, theo dõi chi nhánh từ xa origin / daves_branch. Khi bạn đẩy các thay đổi, nhánh từ xa sẽ được cập nhật.

Đối với hầu hết các phiên bản của git:

git checkout --track origin/daves_branch

--track là viết tắt của git checkout -b [branch] [remotename]/[branch] nơi [remotename] là gốc trong trường hợp này và [chi nhánh] gấp đôi, daves_branch trong trường hợp này.

Đối với git 1.5.6.5 bạn cần điều này:

git checkout --track -b daves_branch origin/daves_branch

Đối với git 1.7.2.3 và cao hơn, điều này là đủ (có thể đã bắt đầu sớm hơn nhưng đây là xác nhận sớm nhất mà tôi có thể tìm thấy nhanh chóng):

git checkout daves_branch

Lưu ý rằng với các phiên bản git gần đây, lệnh này sẽ không tạo ra một nhánh cục bộ và sẽ đưa bạn vào trạng thái 'tách rời HEAD'. Nếu bạn muốn một chi nhánh địa phương, hãy sử dụng --track Tùy chọn. Chi tiết đầy đủ ở đây: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches


2225
2018-03-02 17:45



"git fetch" để đảm bảo repo của bạn được cập nhật với các tham chiếu từ xa và "git checkout --track origin / discover" là đủ. Sau đó, bạn có thể cam kết nhánh đó và "git push" để đồng bộ hóa từ xa với các thay đổi của bạn. - ralphtheninja
Tôi đã thử này và có "fatal: git checkout: cập nhật đường dẫn không tương thích với các chi nhánh chuyển đổi. Bạn có ý định kiểm tra 'upstream / develop' mà không thể được giải quyết như cam kết?". Tôi có làm điều gì sai? - Neil Barnwell
Có vẻ như git 1.5.6.5 cần thay vào đó: git checkout --track -b origin / daves_branch - Charlie
Điều này tạo ra một mớ hỗn độn đối với tôi, nó tạo ra một nhánh địa phương có tên origin / <branch> mà bây giờ không rõ ràng với nhánh gốc từ xa / <branch> và tôi không biết cách loại bỏ nhánh địa phương điên rồ! - Alan Moore
Bạn cần phải thêm tên chi nhánh cục bộ một cách rõ ràng, nếu không git sẽ tạo một nhánh địa phương mới với đường dẫn nhánh đầy đủ, như @AlanMoore và @ derekmx271 đã nói ở trên: git checkout -b --track daves_branch origin/daves_branch - Mike Scott


tôi đã sử dụng fetch theo dõi bởi checkout ...

git fetch <remote> <rbranch>:<lbranch> 
git checkout <lbranch>

... Ở đâu <rbranch> là nhánh từ xa hoặc nguồn ref và <lbranch> là chưa không tồn tại chi nhánh địa phương hoặc ref đích bạn muốn theo dõi và bạn có thể muốn đặt tên giống như nhánh từ xa hoặc nguồn ref. Điều này được giải thích theo tùy chọn trong lời giải thích của <refspec>.

Git rất thông minh, nó tự động hoàn thành lệnh đầu tiên nếu tôi chuyển hướng sau vài chữ cái đầu tiên của nhánh từ xa. IE: Tôi thậm chí không phải đặt tên chi nhánh địa phương, Git tự động sao chép tên của nhánh từ xa cho tôi. Cảm ơn Git!

Cũng như câu trả lời trong bài viết SO tương tự này cho thấy, nếu bạn không đặt tên chi nhánh địa phương ở fetch, bạn vẫn có thể tạo nó khi bạn kiểm tra bằng cách sử dụng -b cờ. I E:  git fetch <remote> <branch> theo dõi bởi git checkout -b <branch> <remote>/<branch> làm chính xác giống như câu trả lời ban đầu của tôi. Và rõ ràng nếu repo của bạn có chỉ một từ xa, sau đó bạn chỉ có thể làm git checkout <branch> sau fetch và nó sẽ tạo ra một chi nhánh địa phương cho bạn. VÍ DỤ: Bạn chỉ cần nhân bản một repo và muốn kiểm tra các chi nhánh bổ sung từ xa.

Tôi tin rằng một số tài liệu cho fetch có thể đã được sao chép nguyên văn từ pull. Đặc biệt là phần trên <refspec> trong tùy chọn là giống nhau. Tuy nhiên, tôi không tin rằng fetch sẽ bao giờ merge, để nếu bạn rời khỏi bên đích của dấu hai chấm trống fetch  không nên làm gì.

LƯU Ý: Điều đó git fetch <remote> <refspec> là viết tắt của git fetch <remote> <refspec>: do đó sẽ không làm gì, nhưng git fetch <remote> <tag> giống như git fetch <remote> <tag>:<tag> nên sao chép điều khiển từ xa <tag> tại địa phương.

Tôi đoán điều này chỉ hữu ích nếu bạn muốn sao chép một chi nhánh ở xa cục bộ, nhưng không nhất thiết phải kiểm tra nó ngay lập tức. Nếu không, bây giờ tôi sẽ sử dụng câu trả lời được chấp nhận ở trên, được giải thích chi tiết trong phần đầu tiên của mô tả thanh toán và sau đó trong tùy chọn phần theo lời giải thích của --track, vì nó là 1 lớp lót. Tốt... loại 1 lớp lót, bởi vì bạn sẽ vẫn phải chạy git fetch <remote> Đầu tiên.

FYI: Thứ tự của <refspecs> (nguồn: đích) giải thích phương pháp Git-1.7 trước kỳ lạ cho xóa các nhánh từ xa. IE: Đẩy không có gì vào refspec đích.


744
2018-04-19 00:45



Bạn cho rằng tính năng tự động hoàn thành Git được thiết lập. code-worrier.com/blog/autocomplete-git - antonagestam
Điều này làm việc cho tôi để có được mã từ xa vào một chi nhánh địa phương. Tuy nhiên nó đã không nhận được chi nhánh địa phương của tôi để theo dõi các chi nhánh từ xa. - Aknosis
Điều này làm việc cho tôi, câu trả lời được chấp nhận thì không. - Parthian Shot
Đối với một số lý do, git fetch remote branch đã không thêm một chi nhánh ở tất cả cho tôi, mặc dù tất cả các refs đã được lấy, vì vậy khi tôi đã cố gắng làm theo các bước trong câu trả lời được chấp nhận, tôi đã nhận được lỗi pathspec did not match any file(s) known to git., nhưng rbranch:lbranch cách tiếp cận làm việc. Thật thú vị, nó cũng lấy tất cả các thẻ bắt đầu bằng cùng một tiền tố, giống như nó là một ký tự đại diện (rbranch*). - haridsv
Nit: git không thực hiện tự động hoàn thành, nó là bash shell đang thực hiện nó. - legalize


Nếu bạn đang cố gắng "thanh toán" một nhánh từ xa mới (chỉ tồn tại trên điều khiển từ xa, nhưng không phải cục bộ), dưới đây là những gì bạn cần:

git fetch origin
git checkout --track origin/<remote_branch_name>

Điều này giả định bạn muốn tìm nạp từ gốc. Nếu không, hãy thay thế gốc bởi của bạn xa Tên.


270
2018-05-17 12:14



"kéo" từ nguồn gốc là ngôn ngữ khó hiểu, tốt hơn để thay đổi bình luận của bạn ở trên để "lấy" từ nguồn gốc. Kéo là một lệnh thực hiện tìm nạp và hợp nhất và chắc chắn gây nhầm lẫn cho người mới đến (tôi đã bao gồm) - Davos
Đã làm cho tôi! Thêm nó vào ghi chú của tôi bây giờ :) Cảm ơn u! - hmd
Làm việc cho tôi, tôi đã không lấy đúng nhánh từ xa nên câu trả lời được chấp nhận giữ cho tôi với một thông điệp khó hiểu. +1 - Nathan Hinchey
Đơn giản và ngọt ngào, tôi chắc chắn hầu hết người dùng chỉ muốn thực hiện thao tác này ngay từ đầu. - vikramvi
Đây là những gì tôi luôn tìm kiếm! Cảm ơn bạn @paneer_tikka - Kris Randall


Để kiểm tra myBranch tồn tại từ xa và không phải cục bộ - Điều này làm việc cho tôi:

git fetch --all
git checkout myBranch

Tôi nhận được thông báo này:

Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'

88
2017-11-12 03:36



Nói cách khác bạn không phải viết -t? - Andrew Samuelsen
Tôi nghĩ rằng có một lỗi trong câu trả lời này. Ban đầu tôi đã làm lệnh mà không cần -t và có You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. bởi vì không có một chi nhánh địa phương có cùng tên. Tôi phải chạy lại với -t sửa chữa. - stanri
Điều này làm việc tốt cho tôi - đồng nghiệp của tôi đã thêm một nhánh mới từ xa mà tôi muốn thêm vào repo địa phương của tôi. Tôi tiếp tục tìm nạp nhưng không thấy chi nhánh mới xuất hiện cục bộ. Đã không nhận ra rằng tôi chỉ có thể chạy checkoutđể tạo ra nó. Cảm ơn! - skwidbreth
phụ thuộc vào phiên bản git. Phiên bản mới nhất, như đã nói ở nơi khác ở đây, chỉ cần git checkout <name of branch on origin>. HÃY CẨN THẬN VỚI ĐỊA PHƯƠNG CÙNG TÊN VÀ CÁC CHI NHÁNH TỪ XA - họ sẽ làm rối tung mọi thứ - leRobot


Sử dụng git branch -a (cả chi nhánh địa phương và từ xa) hoặc git branch -r (chỉ các nhánh từ xa) mới thấy tất cả các điều khiển từ xa và nhánh của chúng. Sau đó bạn có thể làm một git checkout -t remotes/repo/branch đến điều khiển từ xa và tạo một nhánh địa phương.

Ngoài ra còn có lệnh git ls-remote để xem tất cả các ref và thẻ cho điều khiển từ xa đó.


37
2018-03-02 17:16



git checkout remotes/repo/branch làm cho git checkout tìm kiếm một pathspec, không phải là repo từ xa. - Erin
Có, thậm chí có thể thanh toán chi nhánh trên repo từ xa không? Rõ ràng (hoặc có thể nó không phải là quá rõ ràng), điều khiển từ xa đầu tiên được lấy để bạn có chúng tại địa phương. Cuốn sách git có một phần tốt về chúng: git-scm.com/book/en/Git-Branching-Remote-Branches - Daniel Lee


Tiêu đề và câu hỏi bị nhầm lẫn:

  • Git tìm nhánh từ xa
  • làm thế nào đồng nghiệp của tôi có thể kéo chi nhánh đó một cách cụ thể.

Nếu câu hỏi là làm thế nào tôi có thể có được một chi nhánh từ xa để làm việc với hoặc làm thế nào để git kiểm tra một chi nhánh từ xa, một giải pháp đơn giản là:

Với git (> = 1.6.6) bạn có thể sử dụng:

git checkout <branch_name>

Nếu địa phương <branch_name> không tìm thấy nhưng có tồn tại một nhánh theo dõi trong chính xác một từ xa với một tên phù hợp, coi như tương đương với:

git checkout -b <branch_name> --track <remote>/<branch_name>

xem tài liệu để kiểm tra git

Đối với bạn của bạn:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'

33
2018-03-31 10:48



Cảm ơn Guillaume! Tôi chỉ sử dụng lệnh này và viết một bài về nó để mô tả trường hợp chính xác của tôi: leniel.net/2014/05/… - Leniel Maccaferri
<! - git checkout <remote-branch-name> -> hoạt động như mong đợi, Cảm ơn Guillaume! - Sachidananda Naik


git checkout -b serverfix origin/serverfix

Đây là một hoạt động đủ phổ biến mà git cung cấp tốc ký --track:

git checkout --track origin/serverfix

Trên thực tế, điều này rất phổ biến đến nỗi thậm chí còn có lối tắt cho lối tắt đó. Nếu tên chi nhánh bạn đang cố gắng thanh toán (a) không tồn tại và (b) khớp chính xác với tên trên một điều khiển từ xa, Git sẽ tạo một nhánh theo dõi cho bạn:

git checkout serverfix

Để thiết lập một nhánh nội bộ có tên khác với nhánh từ xa, bạn có thể dễ dàng sử dụng phiên bản đầu tiên với một tên chi nhánh cục bộ khác:

git checkout -b sf origin/serverfix

Bây giờ, chi nhánh cục bộ của bạn sẽ tự động lấy từ origin / serverfix.

Nguồn: Pro Git 2nd Edition, được viết bởi Scott Chacon và Ben Straub(cắt để dễ đọc)


24
2018-03-18 00:21



Công trinh! Cảm ơn bạn! - Karl Pokus


git fetch

git branch -r

git checkout <branch_name>

12
2017-12-04 20:53





Với lệnh đơn giản này:

git checkout -b 'your_branch' origin/'remote branch'

11
2018-05-18 09:38



câu trả lời đơn giản tuyệt vời hoạt động. nên hướng tới IMO hàng đầu - russiansummer


Bạn cũng có thể lấy và kiểm tra nhánh từ xa trong một lần: -

git fetch && git checkout the-branch-name

10
2018-03-25 06:43