Bạn không thể cập nhật đường dẫn và chuyển sang chi nhánh cùng lúc


186

Đôi khi tôi sử dụng checkout -btùy chọn để tạo một nhánh mới, kiểm tra nó cùng một lúc và thiết lập theo dõi trong một lệnh.

Trong một môi trường mới, tôi gặp lỗi này:

$ git checkout -b test --track origin/master
fatal: Cannot update paths and switch to branch 'test' at the same time.
Did you intend to checkout 'origin/master' which can not be resolved as commit?

Tại sao Git không thích nó? Điều này được sử dụng để làm việc với cùng một repo.


6
Thông báo lỗi cho bạn biết rằng đó origin/masterkhông phải là một ID cam kết, tức là không phải là một chi nhánh từ xa hợp lệ. Nó hiển thị trong git branch -rđầu ra?

Nó đã không. Hóa ra tôi đã không kiểm tra tất cả các chi nhánh từ xa trong quá trình nhân bản.
marekful

Câu trả lời:


199

' origin/master' mà không thể được giải quyết như là cam kết

Lạ: bạn cần kiểm tra điều khiển từ xa:

git remote -v

Và chắc chắn originlà được tải về:

git fetch origin

Sau đó:

git branch -avv

(để xem nếu bạn đã lấy một origin/masternhánh)

Cuối cùng, sử dụng git switchthay vì khó hiểugit checkout , với Git 2.23+ (tháng 8 năm 2019).

git switch -c test --track origin/master

11
Tôi đã có một lỗi đánh máy trong lệnh của tôi đã gây ra lỗi này; Tôi đã không đánh vần từ xa chính xác!
qix

2
Đó là một chi nhánh mới và kho lưu trữ địa phương của tôi không biết về nó. Tôi đã phải làm một pullvà sau đó lệnh này đã làm việc.
mã hóa_idiot

2
Câu trả lời này rất hữu ích vì nó cho tôi thấy rằng thực sự có một điều kỳ lạ đang diễn ra: Điều khiển từ xa được đặt chính xác, nhưng nhánh từ xa mới chỉ đơn giản là không được tải xuống. Khi tôi sao chép điều khiển từ xa trong một thư mục sạch, nó hoạt động. Thư mục của tôi .gitcó thể bị hỏng bằng cách nào đó?
Konrad Rudolph

git remote -v trả về lỗi nghiêm trọng này: Không phải là tên đối tượng hợp lệ: 'remote'.
Karim Samir

@KarimSamir bạn có thể hỏi một câu hỏi riêng (với phiên bản HĐH và git của bạn), vì được git remote -vthực thi trong git repo không hoạt động.
VonC

78

FWIW: Nếu bạn có một lỗi đánh máy trong tên chi nhánh, bạn sẽ gặp lỗi tương tự.


4
Trên thực tế sẽ rất tuyệt nếu ai đó có thể dành thời gian để nói với các nhà phát triển Git về điều này, thông báo lỗi không có nhiều thông tin;)
Scorchio

8
vâng, đây là vấn đề của tôi, tôi có một khoảng trống trong tên chi nhánh của mình
Karim Samir

Tương tự ở đây, tôi đã cố gắng git checkout -b origin mybranchthay vì git checkout -b mybranch(thêm origin)
Guillaume Renoult

Tôi đã sao chép-dán tên chi nhánh của mình và có khoảng trắng theo sau tên chi nhánh gây ra lỗi này.
học

Tôi đã cố gắng để kiểm tra orgin/my-branchthay vì origin/my-branch. Mất một người ivà tôi cứ gãi đầu một lúc để hiểu tại sao một đồng minh cũ không chịu hòa đồng. Typo thực sự là vấn đề.
DDM

55

Bạn có thể gặp lỗi này trong bối cảnh, ví dụ: bản dựng Travis, theo mặc định, kiểm tra mã với git clone --depth=50 --branch=master. Theo hiểu biết tốt nhất của tôi, bạn có thể kiểm soát --depththông qua .travis.ymlnhưng không phải là --branch. Vì điều đó chỉ dẫn đến một nhánh duy nhất được điều khiển bởi điều khiển từ xa, bạn cần cập nhật độc lập từ xa để theo dõi các ref của điều khiển từ xa mong muốn.

Trước:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master

Cách khắc phục:

$ git remote set-branches --add origin branch-1
$ git remote set-branches --add origin branch-2
$ git fetch

Sau:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/branch-1
remotes/origin/branch-2
remotes/origin/master

5
Giải quyết nó cho tôi. Tôi đã sử dụng một bản sao nông --depth = 1 và đây là thứ tôi cần để chuyển nhánh.
Sawtaytoes

1
Gah vâng, điều sâu sắc chắc chắn dẫn đến lỗi này! Nếu có thể, tôi sẽ đề nghị một vài câu đầu tiên được chỉnh sửa để nhấn mạnh điều sâu sắc.
Dubslow

19

Điều đơn giản này đã làm việc cho tôi!

Nếu nó nói rằng nó không thể làm 2 việc cùng một lúc, hãy tách chúng ra.

git branch branch_name origin/branch_name 

git checkout branch_name

Giúp bạn dễ dàng tìm hiểu vấn đề thực sự là gì
Z. Khullah

9

Bạn có thể làm theo các bước sau khi bạn vấp phải vấn đề này:

  1. Chạy lệnh sau để liệt kê các nhánh được biết đến với kho lưu trữ cục bộ của bạn.

nguồn gốc từ xa

cái nào tạo ra cái này:

 remote origin
  Fetch URL: <your_git_path>
  Push  URL: <your_git_path>
  HEAD branch: development
  Remote branches:
    development                             tracked
    Feature2                                tracked
    master                                  tracked
    refs/remotes/origin/Feature1         stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    Feature2     merges with remote Feature2
    development  merges with remote development
    master       merges with remote master
  Local refs configured for 'git push':
    Feature2     pushes to Feature2     (up to date)
    development  pushes to development (up to date)
    master       pushes to master      (local out of date)
  1. Sau khi xác minh các chi tiết như (tìm nạp URL, v.v.), hãy chạy lệnh này để tìm nạp bất kỳ chi nhánh mới nào (tức là bạn có thể muốn kiểm tra trong repo cục bộ của mình) tồn tại trong điều khiển từ xa nhưng không phải trong địa phương của bạn.
» git remote update

Fetching origin
From gitlab.domain.local:ProjectGroupName/ProjectName
 * [new branch]      Feature3    -> Feature3

Như bạn có thể thấy chi nhánh mới đã được tìm nạp từ xa.
3. Cuối cùng, kiểm tra chi nhánh bằng lệnh này

» git checkout -b Feature3 origin/Feature3

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

Không cần thiết phải nói rõ với Git để theo dõi (sử dụng --track ) chi nhánh với điều khiển từ xa.

Lệnh trên sẽ đặt nhánh cục bộ để theo dõi nhánh từ xa.


4

Nếu bạn có khoảng trắng trong chi nhánh thì bạn sẽ gặp lỗi này.


1

Đối với tôi, tôi cần thêm điều khiển từ xa:

git remote -add myRemoteName('origin' in your case) remoteGitURL

sau đó tôi có thể lấy

git fetch myRemoteName

1

Nó gây ra bởi chi nhánh địa phương của bạn không theo dõi chi nhánh từ xa. Như ssasi đã nói, bạn cần sử dụng các lệnh sau:

git remote update
git fetch
git checkout -b branch_nameA origin/branch_nameB

Tôi đã giải quyết vấn đề của tôi ngay bây giờ ....


0

Trước tiên, bạn cần Fetchđiều khiển từ xa (nhánh cụ thể), sau đó bạn có thể tạo một br cục bộ và theo dõi nó với nhánh từ xa đó bằng cách sử dụng lệnh của bạn (tức là checkoutvới -b và --track).


0

Bạn nên đi đến thư mục con và chạy git status .

Bạn có thể thấy rất nhiều tập tin đã bị xóa. Bạn có thể chạy

  1. git reset .

  2. git checkout .

  3. git fetch -p

  4. git rm --cached submodules // Suboudles là tên của bạn

  5. git submoudle add ....


0

Bạn có thể sử dụng các lệnh sau: git cập nhật từ xa, git fetch, git checkout -b Branch_nameA origin: Branch_nameB

Tôi nghĩ có lẽ do chi nhánh địa phương của bạn không thể theo dõi chi nhánh từ xa

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.