Ai đó đã đẩy một nhánh có tên 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 chi nhánh test
từ xa.
Tôi đã thử:
git checkout test
không làm gì cả
git checkout Origin/test
cung cấp cho * (no branch)
. Mà khó hiểu. Làm thế nào tôi có thể ở "không chi nhánh"?
Làm cách nào để kiểm tra chi nhánh Git từ xa?
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, chỉ với một điều khiển từ xa, bạn có thể thực hiện:
git fetch
git checkout test
Như người dùng masukomi chỉ ra trong một bình luận, git checkout test
sẽ KHÔNG hoạt động 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
hoặc tốc ký
git checkout -t <name of remote>/test
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 trong các câu trả lời dưới đây.
Để tìm nạp một nhánh, bạn chỉ cần:
git fetch Origin
Điều này sẽ lấy tất cả các chi nhánh từ xa cho bạn. Bạn có thể thấy các chi nhánh có sẵn để thanh toán với:
git branch -v -a
Với các chi nhánh từ xa trong tay, bây giờ bạn cần kiểm tra chi nhánh bạn quan tâm, đưa cho bạn một bản sao làm việc tại địa phương:
git checkout -b test Origin/test
Sidenote :Với Git hiện đại (> = 1.6.6 ), bạn có thể sử dụng chỉ
git checkout test
(lưu ý rằng đó là 'thử nghiệm' chứ không phải 'Xuất xứ/thử nghiệm') để thực hiện phép thuật DWIM -mery và tạo nhánh 'thử nghiệm' cục bộ cho bạn, mà ngược dòng sẽ là nhánh theo dõi từ xa '.
Đầu ra * (no branch)
trong git branch
có nghĩa là bạn đang ở trong nhánh không được đặt tên, ở trạng thái được gọi là "tách rời ĐẦU" (các điểm CHÍNH 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 cục bộ). Nếu bạn đã thực hiện một số cam kết trên nhánh không tên này, bạn luôn có thể tạo nhánh cục bộ khỏi cam kết hiện tại:
git checkout -b test HEAD
Trong trường hợp này, có lẽ bạn muốn tạo một nhánh test
cục bộ đang theo dõi nhánh test
từ xa:
$ git branch test Origin/test
Trong các phiên bản trước của git
, bạn cần một tùy chọn --track
rõ ràng, nhưng đó là mặc định bây giờ khi bạn phân nhánh từ một nhánh từ xa.
Mặc dù câu trả lời đầu tiên và được chọn là về mặt kỹ thuật chính xác , có khả năng bạn chưa lấy được tất cả các đối tượng và refs từ kho lưu trữ từ xa. Nếu đó là trường hợp, bạn sẽ nhận được lỗi sau:
$ git checkout -b remote_branch Origin/remote_branch
fatal: 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 'Origin/remote_branch' mà không thể giải quyết như cam kết không?
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
trong đó 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à một ví dụ đầy đủ với các 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, việc chạy git fetch Origin
đã lấy 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 tôi có một giới thiệu đến chi nhánh từ xa, chúng tôi chỉ cần chạy git checkout remote_branch
và chúng tôi sẽ đạt được lợi ích của việc theo dõi từ xa.
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ẽ tìm nạp nhánh từ xa và tạo một nhánh cục bộ mới (nếu chưa tồn tại) với tên local_branch_name
và theo dõi từ xa trong đó.
Điều này sẽ DWIM cho một điều khiển từ xa không có tên Origin ( 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 làm như sau:
$ git remote add remote_name location_of_remote
$ git fetch remote_name
Cái đầu tiên nói với Git cái điều khiển từ xa tồn tại, cái thứ hai nhận được các xác nhận.
Sử dụng:
git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>
Các câu trả lời khác không hoạt động 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 trước nếu nhánh từ xa mới, nhưng tôi chưa kiểm tra trường hợp đó.
OK, câu trả lời rất dễ ... Về cơ bản bạn nhìn thấy chi nhánh, nhưng bạn chưa có bản sao địa phương! ...
Bạn cần fetch
chi nhánh ...
Bạn có thể chỉ cần tìm nạp và sau đó kiểm tra chi nhánh, sử dụng lệnh một dòng dưới đây để làm đ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
:
Để sao chép kho 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ỉ nhánh master
sẽ được khởi tạo. Nếu bạn muốn kiểm tra các chi nhánh khác, hãy làm:
git checkout -t Origin/future_branch (for example)
Lệnh này kiểm tra nhánh từ xa và tên nhánh cục bộ của bạn sẽ giống với nhánh từ xa.
Nếu bạn muốn ghi đè tên chi nhánh địa phương của bạn 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à enhancement
, nhưng tên chi nhánh từ xa của bạn là future_branch
.
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
Trước tiên, bạn cần làm:
git fetch
# Nếu bạn không biết về tên chi nhánh
git fetch Origin branch_name
Thứ hai, bạn có thể kiểm tra chi nhánh từ xa vào địa phương của bạn bằng cách:
git checkout -b branch_name Origin/branch_name
-b
sẽ tạo chi nhánh mới trong tên được chỉ định từ chi nhánh từ xa đã chọn của bạn.
Các lệnh
git fetch --all
git checkout -b <ur_new_local_branch_name> Origin/<Remote_Branch_Name>
bằng với
git fetch --all
và sau đó
git checkout -b fixes_for_dev Origin/development
Cả hai sẽ tạo một latest fixes_for_dev
từ development
Tôi sử dụng lệnh sau:
git checkout --track Origin/other_remote_branch
Nếu chi nhánh nằm trên một cái gì đó không phải là điều khiển từ xa Origin
tôi muốn làm như sau:
$ git fetch
$ git checkout -b second/next upstream/next
Điều này sẽ kiểm tra nhánh next
trên điều khiển upstream
ở một nhánh cục bộ có tên là second/next
. Điều đó có nghĩa là nếu bạn đã có một chi nhánh địa phương có tên tiếp theo thì nó sẽ không xung đột.
$ git branch -a
* second/next
remotes/Origin/next
remotes/upstream/next
git branch -r
nói tên đối tượng không hợp lệ, vì tên chi nhánh đó không có trong danh sách chi nhánh địa phương của Git. Cập nhật danh sách chi nhánh địa phương của bạn từ Origin với:
git remote update
Và sau đó thử kiểm tra chi nhánh từ xa của bạn một lần nữa.
Điều này làm việc cho tôi.
Tôi tin rằng git fetch
kéo vào tất cả các nhánh từ xa, đó không phải là những gì người đăng ban đầu muốn.
không có câu trả lời nào trong số này làm việc cho tôi. cái này hiệu quả
git checkout -b feature/branch remotes/Origin/feature/branch
git fetch && git checkout your-branch-name
Chỉ cần chạy git checkout
với tên của nhánh từ xa. Git sẽ tự động tạo một nhánh cục bộ theo dõi từ xa:
git fetch
git checkout test
Tuy nhiên, nếu tên chi nhánh đó được tìm thấy ở nhiều nơi, điều này sẽ không hoạt động vì Git không biết nên sử dụng tên nào. Trong trường hợp đó, bạn có thể sử dụng một trong hai:
git checkout --track Origin/test
hoặc là
git checkout -b test Origin/test
Trong 2.19 , Git đã học cấu hình checkout.defaultRemote
, chỉ định một điều khiển từ xa để mặc định khi giải quyết một sự mơ hồ như vậy.
Tôi đã bị mắc kẹt trong một tình huống nhìn thấy error: pathspec 'desired-branch' did not match any file(s) known to git.
cho tất cả các đề xuất ở trên. Tôi đang dùng phiên bản git 1.8.3.1.
Vì vậy, cái này làm việc cho tôi :
git fetch Origin desired-branch
git checkout -b desired-branch FETCH_HEAD
Giải thích đằng sau là tôi đã nhận thấy rằng khi tìm nạp nhánh từ xa, nó đã được tìm nạp vào FETCH_HEAD:
$ git fetch Origin desired-branch
From github.com:MYTEAM/my-repo
* branch desired-branch -> FETCH_HEAD
Lệnh git remote show <Origin name>
sẽ liệt kê tất cả các nhánh (bao gồm các nhánh không được theo dõi). Sau đó, bạn có thể tìm thấy tên chi nhánh từ xa mà bạn cần tìm nạp.
Thí dụ:
$ git remote show Origin
Sử dụng các bước sau để tìm nạp các nhánh từ xa:
git fetch <Origin name> <remote branch name>:<local branch name>
git checkout <local branch name > (local branch name should the name that you given fetching)
Thí dụ:
$ git fetch Origin test:test
$ git checkout test
Những kẻ và cô gái khác đưa ra giải pháp, nhưng có lẽ tôi có thể cho bạn biết lý do tại sao.
kiểm tra git mà không làm gì
Does nothing
không bằng doesn't work
, vì vậy tôi đoán khi bạn nhập test kiểm tra kiểm tra git 'trong thiết bị đầu cuối của bạn và nhấn phím enter, không có thông báo nào xuất hiện và không có lỗi xảy ra. Tôi có đúng không
Nếu câu trả lời là "có", tôi có thể cho bạn biết nguyên nhân.
Nguyên nhân là có một tệp (hoặc thư mục) có tên 'test' trong cây công việc của bạn.
Khi git checkout xxx
được phân tích cú pháp,
xxx
như một tên chi nhánh, nhưng không có bất kỳ chi nhánh nào được đặt tên thử nghiệm.xxx
là một đường dẫn và may mắn thay (hoặc không may), có một tệp có tên là test. Vì vậy, git checkout xxx
có nghĩa là loại bỏ mọi sửa đổi trong tệp xxx
.xxx
, thì Git sẽ cố gắng tạo xxx
theo một số quy tắc. Một trong những quy tắc là tạo một nhánh có tên xxx
nếu tồn tại remotes/Origin/xxx
.Để có được các nhánh mới được tạo
git fetch
Để chuyển sang chi nhánh khác
git checkout BranchName
Bạn có thể bắt đầu theo dõi tất cả các nhánh từ xa với tập lệnh Bash sau:
#!/bin/bash
git fetch --all
for branch in `git branch -r --format="%(refname:short)" | sed 's/Origin\///'`
do git branch -f --track "$branch" "Origin/$branch"
done
Đây cũng là một phiên bản một dòng:
git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/Origin\///'`; do git branch --track "$branch" "Origin/$branch" ; done ;
Lấy từ xa và kiểm tra chi nhánh.
git fetch <remote_name> && git checkout <branch_name>
Ví dụ.:
git fetch Origin && tính năng kiểm tra git/XYZ-1234-Thêm cảnh báo
Sử dụng fetch
để kéo tất cả điều khiển từ xa của bạn
git fetch --all
Để liệt kê các chi nhánh từ xa:
git branch -r
Để liệt kê tất cả các chi nhánh của bạn
git branch -l
>>outpots like-
* develop
test
master
Để kiểm tra/thay đổi một chi nhánh
git checkout master
Nếu tên nhánh từ xa bắt đầu bằng các ký tự đặc biệt, bạn cần sử dụng các dấu ngoặc đơn xung quanh nó trong lệnh thanh toán, nếu không git sẽ không biết bạn đang nói về nhánh nào.
Ví dụ: tôi đã cố kiểm tra một nhánh từ xa có tên là #9773
nhưng lệnh không hoạt động đúng, như trong hình dưới đây:
Vì một số lý do, tôi tự hỏi liệu biểu tượng sắc nét (#) có liên quan gì đến nó không, và sau đó tôi đã thử bao quanh tên chi nhánh bằng các dấu ngoặc đơn, như '#9773'
rathen thay vì chỉ #9773
, và nó hoạt động tốt.
$ git checkout -b '#9773' Origin/'#9773'
Hãy làm theo lệnh để tạo một thư mục trống. Nhập vào đó và sử dụng lệnh này:
saifurs-Mini:YO-iOS saifurrahman$ git clone your_project_url
Cloning into 'iPhoneV1'...
remote: Counting objects: 34230, done.
remote: Compressing objects: 100% (24028/24028), done.
remote: Total 34230 (delta 22212), reused 15340 (delta 9324)
Receiving objects: 100% (34230/34230), 202.53 MiB | 294.00 KiB/s, done.
Resolving deltas: 100% (22212/22212), done.
Checking connectivity... done.
saifurs-Mini:YO-iOS saifurrahman$ cd iPhoneV1/
saifurs-Mini:iPhoneV1 saifurrahman$ git checkout 1_4_0_content_discovery
Branch 1_4_0_content_discovery set up to track remote branch 1_4_0_content_discovery from Origin.
Switched to a new branch '1_4_0_content_discovery'