Kiểm tra Git: cập nhật đường dẫn không tương thích với các nhánh chuyển đổi


467

Vấn đề của tôi liên quan đến lỗi Fatal Git khi chuyển nhánh .

Tôi cố gắng tìm nạp một nhánh từ xa bằng lệnh

git checkout -b local-name origin/remote-name

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

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 'nguồn gốc / tên từ xa' mà không thể giải quyết như cam kết không?

Nếu tôi tự tạo một nhánh và sau đó kéo nhánh từ xa, nó sẽ hoạt động, giống như tạo một bản sao mới và kiểm tra nhánh đó.

Tại sao nó không hoạt động trên kho lưu trữ mà tôi làm việc với?


1
Điều gì đã thay đổi kể từ phiên bản đầu tiên của lệnh đó (kích hoạt thông báo lỗi)?
VonC

git init git fetch git fetch git: //blabla.com/dir1/Project.git

Câu trả lời:


739

Tôi tin rằng điều này xảy ra khi bạn đang cố gắng kiểm tra một chi nhánh từ xa mà repo git địa phương của bạn chưa biết. Thử:

git remote show origin

Nếu chi nhánh từ xa bạn muốn kiểm tra nằm dưới "Chi nhánh từ xa mới" chứ không phải "Chi nhánh từ xa được theo dõi" thì bạn cần tìm nạp chúng trước:

git remote update
git fetch

Bây giờ nó sẽ hoạt động:

git checkout -b local-name origin/remote-name

7
Điều này giải quyết vấn đề cho tôi, không phải là câu trả lời tùy ý ở trên.
Jessedc

21
Đó phải là "git fetch REPOSITORY_NAME" để có được tất cả các nhánh trên kho lưu trữ đó.
Mike Thomsen

1
không cần thiết. git fetchsẽ nhận được tất cả các chi nhánh từ tất cả các repos từ xa.
Michael Grinich

4
Trong trường hợp bất cứ ai khác đấu tranh với sự điên loạn hoàn toàn của tất cả điều này: git fetch nguồn gốc / BRANCHNAME là không giống như git fetch. Cái trước chỉ đơn giản là kết quả là "mới (lần tìm nạp tiếp theo sẽ lưu trữ trong điều khiển từ xa / nguồn gốc)" hiển thị trong một cột hiển thị thông qua nguồn gốc hiển thị từ xa git.
Alexander Kellett

7
Nếu bạn đang cố gắng làm điều này cho một điều khiển từ xa mà bạn đã thêm một cách rõ ràng (vì vậy bất cứ điều gì khác ngoài nguồn gốc ), bạn sẽ cần phải làm git remote updatetrước khi tìm nạp của bạn sẽ tìm nạp từ xa đó. Nếu không, bạn nhận được tin nhắn như Did you intend to checkout 'upstream-repo/master' which can not be resolved as commit?Vui lòng thêm câu này vào câu trả lời và tiết kiệm cho mọi người giá trị hàng giờ để đọc cùng một câu trả lời chỉ có tác dụng đối với nguồn gốc.
Bruno Bronosky

150

Cú pháp thay thế,

git fetch origin remote_branch_name:local_branch_name

12
Điều này làm việc cho tôi. Tên chi nhánh từ xa của tôi không phải là nguồn gốc. Tôi không biết điều đó có làm nên sự khác biệt khi tôi uống vodka không.
Rimian

13
Đây không chỉ là một cú pháp thay thế, nhưng có thể hoạt động khi kiểm tra git -b Branch_name origin / Branch_name không hoạt động
mã hóa

1
Điều này cũng đã khắc phục sự cố của tôi khi chạy "git checkout --track origin / remote-Branch", vốn ban đầu có lỗi tương tự như OP trước khi sửa. Cảm ơn!
kakyo

1
Làm việc cho tôi sau khi chạy cũng là câu trả lời xác nhận.
AsTeR

2
Có, tôi nghi ngờ --depthvòng loại cho bản sao gốc có thể có lỗi ở đây. Tôi đã thành công với git fetch remote_branch_name:local_branch_namenhưng tất cả các lời khuyên khác đều thất bại.
John Kelleher

46

Sau khi đã thử hầu hết những gì tôi có thể đọc trong chủ đề này mà không thành công, tôi tình cờ thấy cái này: Chi nhánh từ xa không hiển thị trong "git chi nhánh -r"

Hóa ra tập tin .git / config của tôi không chính xác. Sau khi làm một sửa chữa đơn giản tất cả các chi nhánh xuất hiện.

Đi từ

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/master:refs/remotes/origin/master

đến

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Đã lừa


4
Đó thực sự là một cấu hình kỳ lạ. Nó bảo git chỉ lấy nhánh chủ từ xa.
Ikke

3
Tôi sẽ bỏ phiếu lên 10 lần nếu tôi có thể! - đây dường như là một điều mà git mới làm khi nhân bản
mpapis

2
Tôi đã có cùng một vấn đề, nó đã khiến tôi phát điên. Bất cứ ai không nhìn thấy các chi nhánh từ xa, xin vui lòng kiểm tra này !!
Carlos Granados

Cảm ơn chúa vì câu trả lời của bạn :)
Sacha

Tâm = thổi! Cảm ơn bạn!
Chiranjib

12

Không chắc điều này có hữu ích hay chính xác liên quan đến câu hỏi của bạn không, nhưng nếu bạn đang cố gắng tìm nạp và kiểm tra chỉ một nhánh duy nhất từ kho lưu trữ từ xa, thì các lệnh git sau sẽ thực hiện thủ thuật:

url= << URL TO REPOSITORY >>
branch= << BRANCH NAME >>

git init
git remote add origin $url
git fetch origin $branch:origin/$branch
git checkout -b $branch --track origin/$branch

11

Không ai ở trên làm việc cho tôi. Tình hình của tôi hơi khác một chút, chi nhánh từ xa của tôi không có nguồn gốc . nhưng trong một kho lưu trữ khác nhau.

git remote add remoterepo GIT_URL.git
git fetch remoterepo
git checkout -b branchname remoterepo/branchname

Mẹo: nếu bạn không thấy chi nhánh từ xa trong đầu ra sau đây git branch -v -a, không có cách nào để kiểm tra.

Xác nhận làm việc trên 1.7.5.4


arf, chỉ cần nhận ra VirtualStaticVoid có cùng một giải pháp!
Olivier Refalo

+1 cho git branch -v -a: Tôi có một điều khiển từ xa được cấu hình không chính xác cho biết fetch = +refs/heads/*:refs/remotes/master/*mặc dù điều khiển từ xa đã được gọi upstream.
keflavich

7

Đối với tôi những gì đã làm việc là:

git fetch

Điều này kéo tất cả các ref xuống máy của bạn cho tất cả các nhánh trên remote. Sau đó tôi có thể làm

git checkout <branchname>

và điều đó đã làm việc hoàn hảo. Tương tự như câu trả lời bình chọn hàng đầu, nhưng đơn giản hơn một chút.


4

Tôi nghi ngờ không có chi nhánh từ xa có tên từ xa, nhưng bạn đã vô tình tạo ra một chi nhánh địa phương có tên là origin / remote-name.

Có thể bạn tại một số điểm đánh máy:

nguồn gốc chi nhánh git / tên từ xa

Do đó, tạo ra một nhánh địa phương có tên là origin / remote-name? Gõ lệnh này:

nguồn gốc thanh toán git / tên từ xa

Bạn sẽ thấy:

Chuyển sang nhánh "nguồn gốc / tên từ xa"

có nghĩa là nó thực sự là một chi nhánh địa phương được đặt tên sai, hoặc

Lưu ý: chuyển sang "origin / rework-isscoring" không phải là một nhánh cục bộ
Nếu bạn muốn tạo một chi nhánh mới từ thanh toán này, bạn có thể làm như vậy
(bây giờ hoặc sau này) bằng cách sử dụng -b với lệnh thanh toán một lần nữa. Thí dụ:
  kiểm tra git -b 

có nghĩa là nó thực sự là một chi nhánh từ xa.


3

Nó không trực quan lắm nhưng điều này hoạt động tốt với tôi ...

  mkdir remote.git & cd remote.git & git init
  git remote add origin $REPO
  git fetch origin $BRANCH:refs/remotes/origin/$BRANCH        

THEN chạy lệnh git nhánh --track ...

  git branch --track $BRANCH origin/$BRANCH

2

Đối với tôi, tôi đã mắc lỗi đánh máy và chi nhánh từ xa của tôi không tồn tại

Sử dụng git branch -ađể liệt kê các chi nhánh từ xa


1

Vấn đề của bạn có thể được liên kết với "vấn đề thanh toán" SO này không?

tức là: một vấn đề liên quan đến:

  • một phiên bản cũ của Git
  • một cú pháp kiểm tra tò mò, nên là : git checkout -b [<new_branch>] [<start_point>], với việc [<start_point>]đề cập đến tên của một cam kết để bắt đầu chi nhánh mới, và 'origin/remote-name'đó không phải là điều đó.
    (trong khi git branchkhông hỗ trợ start_point là tên của một nhánh từ xa)

Lưu ý: những gì tập lệnh checkout.sh nói là:

  if test '' != "$newbranch$force$merge"
  then
    die "git checkout: updating paths is incompatible with switching branches/forcing$hint"
  fi

Nó giống như cú pháp kiểm tra git -b [] [remote_branch_name] vừa đổi tên nhánh và đặt lại điểm bắt đầu mới của nhánh mới, được coi là không tương thích.


Vấn đề đã được giải quyết. git checkout -b tên địa phương từ xa / chi nhánh từ xa thực sự hoạt động
Ikke

1
Thật thú vị, điều gì đã thay đổi kể từ phiên bản đầu tiên của lệnh đó (kích hoạt thông báo lỗi)?
VonC

1

Sau khi tìm nạp hàng triệu lần, các điều khiển từ xa vẫn không xuất hiện, mặc dù các đốm màu nằm trong hồ bơi. Hóa ra tùy chọn --tags không nên được đưa ra git remote addvì bất kỳ lý do gì. Bạn có thể xóa thủ công khỏi .git / config để tạo git fetch tạo các ref.

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.