a

Câu hỏi Làm cách nào để kiểm tra chi nhánh Git từ xa?


Ai đó đã đẩy một chi nhánh gọi là test với git push origin test vào một kho lưu trữ được chia sẻ. Tôi có thể thấy chi nhánh với git branch -r.

Bây giờ tôi đang cố gắng kiểm tra điều khiển từ xa test chi nhánh.

Tôi đã thử:

  • git checkout test không làm gì cả

  • git checkout origin/test cho * (no branch). Đó là khó hiểu. Làm thế nào tôi có thể được vào "không có chi nhánh"?

Làm cách nào để kiểm tra chi nhánh Git từ xa?


5316
2017-11-23 14:23


gốc


@inger Nhưng nó không bao gồm khả năng đổi tên nhánh mới cục bộ (nếu bạn muốn --set-upstream sau này và giữ cho tính nhất quán đặt tên) - fachexot
Tôi nghĩ rằng chủ đề này là vô ích. Không có gì có vẻ hiệu quả, câu hỏi ban đầu dường như đã bị mất trong nhiều câu trả lời. Tôi đã đọc từng từ, thử mọi thứ dưới đây, và không biết làm thế nào để làm những gì mà OP muốn làm. - Tony Ennis
Lệnh Git không trực quan để bắt đầu, thêm các thay đổi được giới thiệu với các phiên bản gần đây vào bản trộn và bạn có trang này ... - Christophe Roussy
Tôi cảm thấy như tôi đang uống thuốc điên. Tôi đang cố gắng thanh toán chi nhánh từ một upstream, không chỉ originvà mọi câu trả lời được đề nghị không làm bất cứ điều gì từ xa hữu ích (có ý định chơi chữ). CHỈNH SỬA - xin lỗi, vô số lời đề nghị chứa trong 2 câu trả lời hàng đầu là vô dụng; Thứ 3 (git branch test origin/test) là những gì hiệu quả. Vui mừng trong top 2 có 20x số phiếu bầu ... - dwanderson
Có thể bạn có một tệp có tên 'test' trong cây công việc của bạn, xem stackoverflow.com/a/45006389/792416 để biết chi tiết. - oldman


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


Cập nhật

Câu trả lời của Jakub thực sự cải thiện về điều này. Với phiên bản Git ≥ 1.6.6, bạn có thể thực hiện:

git fetch
git checkout test

(Người dùng masukomi chỉ ra dưới đây git checkout test sẽ KHÔNG làm việc trong git hiện đại nếu bạn có nhiều điều khiển từ xa. Trong trường hợp này, sử dụng git checkout -b test <name of remote>/test).

Câu trả lời cũ

Trước khi bạn có thể bắt đầu làm việc cục bộ trên một nhánh từ xa, bạn cần tìm nạp nó như được gọi ra trong các câu trả lời dưới đây.

Để tìm nhánh, bạn chỉ cần:

git fetch origin

Thao tác này sẽ tìm nạp tất cả các nhánh từ xa cho bạn. Bạn có thể xem các chi nhánh có sẵn để thanh toán bằng:

git branch -v -a

Với các nhánh từ xa trong tay, bây giờ bạn cần kiểm tra nhánh bạn quan tâm, cung cấp cho bạn một bản sao làm việc cục bộ:

git checkout -b test origin/test

7366
2017-11-23 14:26



Để mở rộng về điều này: git không cho phép bạn làm việc trên các nhánh của người khác. Bạn chỉ có thể tự mình làm việc. Vì vậy, nếu bạn muốn thêm vào nhánh của người khác, bạn cần phải tạo "bản sao" của riêng bạn của nhánh đó, đó là những gì lệnh trên làm (tốt, nó tạo ra nhánh của bạn và kiểm tra nó ra). - Dan Moulding
Nếu đó là nhánh mới từ xa bạn có thể cần git fetch trước khi làm điều này để git nhận thức được origin/test - Neil Sarkar
... và bạn sẽ làm điều này với git fetch origin test - Andrew
Lỗi: "git checkout: cập nhật đường dẫn không tương thích với các nhánh chuyển đổi. Bạn có định thanh toán không origin/test mà không thể được giải quyết như cam kết? " - Xeoncross
git checkout testsẽ KHÔNG làm việc trong git hiện đại nếu bạn có nhiều điều khiển từ xa có cùng tên chi nhánh. Nó không thể biết cái nào để sử dụng. - masukomi


Sidenote: Với Git hiện đại (> = 1.6.6), bạn có thể sử dụng

git checkout test

(lưu ý rằng đó là 'thử nghiệm' không 'nguồn gốc / thử nghiệm') để thực hiện phép thuật DWIM-mery và tạo chi nhánh địa phương 'thử nghiệm' cho bạn, mà thượng lưu sẽ là chi nhánh theo dõi từ xa 'nguồn gốc / thử nghiệm'.


Các * (no branch) trong git branch đầu ra có nghĩa là bạn đang ở trên nhánh chưa được đặt tên, trong trạng thái được gọi là "tách rời HEAD" (các điểm HEAD trực tiếp để cam kết, và không phải là tham chiếu tượng trưng cho một số nhánh nội bộ). Nếu bạn đã thực hiện một số cam kết trên nhánh chưa đặt tên này, bạn luôn có thể tạo nhánh nội bộ ngoài cam kết hiện tại:

git checkout -b test HEAD

1092
2017-11-24 00:17



Không ngạc nhiên, nhưng phiên bản này đã được phát hành trong vài năm qua - biết cú pháp này có thể tiết kiệm rất nhiều thời gian vì vẫn còn rất nhiều tài liệu cũ và các chuỗi nhận xét nổi xung quanh đề xuất phương pháp cũ hơn để thực hiện việc này. - Curtis
"git hiện đại" - cho bản ghi, (xấp xỉ) bạn đang đề cập đến phiên bản nào? Đôi khi chúng tôi phải làm việc trên các hệ thống chạy các bản phân phối cũ hơn. - Craig McQueen
"git hiện đại" trong ngữ cảnh này là git 1.6.6 - Bobby Norton
@aidan Nếu bạn nhận được phản hồi như error: pathspec 'branch_name' did not match any file(s) known to git. sau đó bạn nên làm một git lấy đầu tiên. - Dennis
Sử dụng git phiên bản 1.8.3.msysgit.0 và điều này không hiệu quả đối với tôi - không khớp với bất kỳ tệp nào đã biết đến git - Tôi đã thực hiện nhiều lần tải git - PandaWood


Trong trường hợp này, bạn có thể muốn tạo một địa phương test nhánh đang theo dõi điều khiển từ xa test chi nhánh:

$ git branch test origin/test

Trong các phiên bản trước của git, bạn cần một cách rõ ràng --track tùy chọn, nhưng đó là mặc định ngay bây giờ khi bạn đang phân nhánh một nhánh từ xa.


478
2017-11-23 14:27



Điều này sẽ tạo ra một chi nhánh địa phương mà không cần chuyển sang nó. - Alex.Designworks
Mặc dù tôi đã gây tử vong: Tên đối tượng mơ hồ: 'origin / dev' - nơi một nhánh 'dev' xuất xứ chắc chắn tồn tại - nhưng tôi đã vô tình tạo ra một nhánh có tên là "origin / dev" trên máy tính của tôi. để có được quyền này, không nghi ngờ gì nữa ... ouch - PandaWood
Điều này đã mang lại cho tôi lỗi lỗi: không thể đẩy một số gợi ý đến gợi ý: Các cập nhật đã bị từ chối bởi vì một nhánh nhánh được đẩy nằm phía sau gợi ý từ xa của nó: đối tác. Xem chi nhánh này và hợp nhất gợi ý thay đổi từ xa: (ví dụ: 'git pull') trước khi đẩy lại. gợi ý: Xem 'Lưu ý về chuyển tiếp nhanh' trong 'git push --help' để biết chi tiết. - pal4life
git branch test làm việc cho tôi - Isaac Pak


Câu trả lời được chấp nhận không làm việc cho bạn?

Trong khi câu trả lời đầu tiên và được chọn là kỹ thuật chính xác, có khả năng bạn chưa truy xuất tất cả các đối tượng và refs từ kho lưu trữ từ xa. Nếu đúng như vậy, bạn sẽ nhận được lỗi sau:

$ git checkout -b remote_branch origin/remote_branch

fatal: git checkout: cập nhật các đường dẫn không tương thích với các nhánh chuyển đổi.
  Bạn có dự định thanh toán 'origin / remote_branch' không thể giải quyết dưới dạng cam kết không?

Dung dịch

Nếu bạn nhận được thông báo này, trước tiên bạn phải thực hiện git fetch origin Ở đâu origin là tên của kho lưu trữ từ xa trước khi chạy git checkout remote_branch. Dưới đây là ví dụ đầy đủ với câu trả lời:

$ git fetch origin
remote: Counting objects: 140, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 69 (delta 36), reused 66 (delta 33)
Unpacking objects: 100% (69/69), done.
From https://github.com/githubuser/repo-name
   e6ef1e0..5029161  develop    -> origin/develop
 * [new branch]      demo       -> origin/demo
   d80f8d7..359eab0  master     -> origin/master

$ git checkout demo
Branch demo set up to track remote branch demo from origin.
Switched to a new branch 'demo'

Như bạn có thể thấy, đang chạy git fetch origin truy xuất bất kỳ nhánh từ xa nào mà chúng tôi chưa thiết lập để theo dõi trên máy cục bộ của chúng tôi. Từ đó, vì bây giờ chúng ta có một ref đến nhánh từ xa, chúng ta có thể chỉ cần chạy git checkout remote_branch và chúng tôi sẽ thu được lợi ích của theo dõi từ xa.


395
2017-12-07 20:52



Tôi sẽ thêm một lưu ý nếu bạn có một chi nhánh riêng biệt tại địa phương: Hãy chắc chắn rằng bạn đã liên kết điều này với repo từ xa bằng cách sử dụng 'git remote add origin [the_path_to_your_repo / repo_name.git]'. Sau đó, sử dụng 'git fetch origin' nơi 'origin' có nghĩa là kho gốc bạn đã tạo liên kết. - elliotrock
git checkout -b newbranch cũng hoạt động tốt cho 1 bước tạo và thanh toán chi nhánh mới dựa trên nhánh hiện tại. - Linus
Tôi nghĩ rằng đây là cập nhật nhất (nó giữ $ @ #! Ing thay đổi!). Git 2.5.5 Tôi tìm thấy cách duy nhất để thực sự xem các nhánh từ xa là git ls-remote và cách duy nhất để sử dụng một git checkout -b [branch] --track [remote/branch]... và đó là sau  git pull [remote] [branch] đã làm việc. Tức là, nó thực sự kéo toàn bộ nhánh cây, nhưng vẫn không liệt kê nó. - delicateLatticeworkFever
và khi câu trả lời này không hiệu quả, hãy xem cái này. - eis


Tôi đã thử giải pháp trên, nhưng nó không hoạt động. Hãy thử điều này, nó hoạt động:

git fetch origin 'remote_branch':'local_branch_name'

Điều này sẽ lấy nhánh từ xa và tạo một nhánh mới (nếu chưa tồn tại) với tên local_branch_namevà theo dõi từ xa trong đó.


176
2017-10-18 05:55



Điều này làm việc cho tôi khi không git lấy nguồn gốc hoặc git cập nhật từ xa tạo ra các chi nhánh địa phương. Tôi cung không chăc tại sao. - Godsmith
Đây là cách trực tiếp nhất để hoàn thành những gì tôi cần, đó là sử dụng một nhánh từ xa (không phải là chủ) để tạo ra một nhánh mới. - Roralee
Làm việc liên tục, đặc biệt là khi đã nhân bản một nhánh đơn từ một điều khiển từ xa với nhiều nhánh. - Alex C
điều này cũng làm việc cho tôi, nơi mà những câu trả lời được chấp nhận và những người bình chọn cao khác thì không. Phiên bản git của tôi là 2.5.0 - pdepmcp
Có ai có bất kỳ ý tưởng tại sao điều này hoạt động khi mọi thứ khác không? (Tôi đang ở trên git 2.13.0) - Nathan Arthur


Điều này sẽ DWIM cho một nguồn gốc không được đặt tên từ xa (tài liệu):

$ git checkout -t remote_name/remote_branch

Để thêm một điều khiển từ xa mới, bạn sẽ cần phải làm như sau:

$ git remote add remote_name location_of_remote
$ git fetch remote_name

Việc đầu tiên nói với Git từ xa tồn tại, thứ hai nhận được các cam kết.


100
2018-04-27 22:37





Sử dụng:

git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>

Câu trả lời khác không làm việc với Git hiện đại trong trường hợp lành tính của tôi. Bạn có thể cần phải kéo đầu tiên nếu chi nhánh từ xa là mới, nhưng tôi đã không kiểm tra trường hợp đó.


89
2018-02-21 10:58



Bạn có nhận ra rằng đây là một trích đoạn này câu trả lời - Thomas Ayoub
Nhìn vào nó bây giờ, họ làm chồng lên nhau. Chỉ có tôi là ngắn gọn và cho bạn biết phải làm gì thay vì kể một câu chuyện. Tôi cho rằng nó có thể hữu ích hơn do đó, đặc biệt là cho các phiên bản git ngày nay. Bạn có thể downvote nó nếu bạn nghĩ rằng đó là một câu trả lời xấu. - matanster


Để sao chép kho lưu trữ Git, hãy làm:

git clone <either ssh url /http url>

Lệnh trên kiểm tra tất cả các nhánh, nhưng chỉ master nhánh sẽ được khởi tạo. Nếu bạn muốn thanh toán các chi nhánh khác, hãy làm:

git checkout -t origin/future_branch (for example)

Lệnh này sẽ kiểm tra nhánh từ xa và tên nhánh địa phương của bạn sẽ giống như nhánh từ xa.

Nếu bạn muốn ghi đè tên chi nhánh địa phương khi thanh toán:

git checkout -t -b enhancement origin/future_branch

Bây giờ tên chi nhánh địa phương của bạn là enhancementnhưng tên chi nhánh từ xa của bạn là future_branch.

Tài liệu


45
2018-01-21 10:04



git clone <url ssh / http url> - hoạt động hoàn hảo với tôi - Kmeixner
Vâng, bạn đúng. Cảm ơn thông tin của bạn, tôi sẽ cập nhật thông tin rất sớm @warvariuc - Madhan Ayyasamy
Nếu điều khiển từ xa không có master, điều này sẽ không hoạt động. - polkovnikov.ph


được, câu trả lời rất dễ ... Bạn về cơ bản thấy chi nhánh, nhưng bạn chưa có bản sao cục bộ ...

Bạn cần phải fetch các chi nhánh...

Bạn có thể chỉ cần lấy và sau đó thanh toán cho chi nhánh, sử dụng lệnh một dòng bên dưới để thực hiện điều đó:

git fetch && git checkout test

Tôi cũng đã tạo hình ảnh bên dưới để bạn chia sẻ sự khác biệt, xem cách fetch hoạt động và cũng khác với pull:

git fetch


42
2017-09-05 14:20



Hình ảnh tuyệt vời, cảm ơn - developer
Không hoạt động nếu không có chi nhánh địa phương test - Dmitri Zaitsev
@ DmitriZaitsev vâng, nó sẽ hoạt động, nếu nhánh từ xa ở đó, và bạn tìm nạp, bạn sẽ nhận được nhánh tại địa phương ... git fetch && git checkout test..Việc này hoạt động, trừ khi không có nhánh từ xa, nhưng câu hỏi nói rằng đã có một nhánh từ xa ở đó ... - Alireza
Cách tôi nhìn thấy câu hỏi, test trông giống như một chi nhánh mới, vì vậy nó không có khả năng có mặt tại địa phương. Nếu không, bạn có thể kéo nó dễ dàng hơn với single git pull chỉ huy. - Dmitri Zaitsev
@ DmitriZaitsev, vâng, đó là lý do tại sao tôi nói git fetch, kiểm tra các nhánh từ xa vừa tạo, kéo có thể mang các thứ không mong muốn khác vào, nhưng lấy tất cả các nhánh sẵn sàng nếu bạn đã có repo cục bộ ... - Alireza


Bạn co thể thử

git fetch remote
git checkout --track -b local_branch_name origin/branch_name

hoặc là

git fetch
git checkout -b local_branch_name origin/branch_name

27
2018-03-24 13:11



FYI, --track không còn cần thiết trong các phiên bản git mới hơn, vì nó được đặt theo mặc định, như được giải thích trong câu trả lời trước đó.