git rebase fatal: Cần một phiên bản duy nhất


162

Tôi có một chi nhánh của một kho lưu trữ công cộng và tôi đang cố gắng cập nhật chi nhánh của mình với các cam kết hiện tại từ kho lưu trữ ban đầu:

$ git fetch <remote>
remote: Counting objects: 24, done.
remote: Compressing objects: 100% (20/20), done.
remote: Total 20 (delta 12), reused 0 (delta 0)
Unpacking objects: 100% (20/20), done.
From git://github.com/path_to/repo
  9b70165..22127d0  master     -> $/master
$ git rebase <remote>
fatal: Needed a single revision
invalid upstream <remote>

Tên <remote>thay cho tên từ xa của tôi và không thực sự là tên từ xa của tôi. Các tài liệu về lỗi này có vẻ là một chút lỏng lẻo.


2
Tôi đã gặp lỗi này vì một lý do không liên quan - sử dụng "git rebase - interactive c4e9c94 ^" từ dấu nhắc lệnh của Windows. Nó nhắc tôi "Nhiều hơn?", Và bất kể nó trả lời lời nhắc như thế nào, nó nói "gây tử vong: cần một sửa đổi duy nhất". Nhưng khi tôi chạy lệnh tương tự từ bash, nó hoạt động tốt.
Richard Beier

Như một lưu ý phụ, đối với tôi ngoài việc có nhánh ngược dòng được liệt kê với "từ xa", tôi phải tìm nạp nhánh cụ thể mà tôi muốn khởi động lại. "git tìm nạp <thượng nguồn> chủ". Chỉ tìm nạp <ngược dòng> với "git fetch <ngược dòng>" vẫn sẽ gây ra lỗi này.
Ngọt ngào

Câu trả lời:


132

Bạn cần cung cấp tên của một chi nhánh (hoặc số nhận dạng cam kết khác), chứ không phải tên của một điều khiển từ xa git rebase.

Ví dụ:

git rebase origin/master

không phải:

git rebase origin

Lưu ý, mặc dù originnên giải quyết với ref origin/HEADkhi được sử dụng làm đối số yêu cầu tham chiếu cam kết, nhưng dường như không phải kho lưu trữ nào cũng có được tham chiếu như vậy nên có thể nó không (và trong trường hợp của bạn không hoạt động). Nó trả tiền để được rõ ràng.


2
Cái sau nên thực sự hoạt động - origintrong bối cảnh ref được hiểu là origin/HEAD. Tôi đã thấy các kho lưu trữ cuối cùng không biết nó origin/HEADlà gì , mặc dù ...
Cascabel

1
@Jefromi: Tôi sợ rằng tôi không tin bạn, tôi vừa thử git rebase origintrên kho lưu trữ thử nghiệm (nơi originHEAD) và tôi gặp lỗi của OP. Tài liệu cho rebase không nói rằng một tên từ xa là hợp lệ cho <upstream>.
CB Bailey

1
@Charles: Chà, nó có thể là một lỗi? git rev-parse originhoạt động, giống như git rebase origintrong bản sao git.git của tôi (trong trường hợp cập nhật nhanh, chuyển tiếp nhanh và thực sự, bao gồm cả tương tác).
Cascabel

@Jefromi: Bạn có thể git describecủa bạn HEAD?
CB Bailey

@Charles: cập nhật, v1.7.4-rc3! Tôi không quá háo hức muốn làm một người tìm kiếm cái này ...
Cascabel

28

Kiểm tra xem bạn đánh vần đúng tên chi nhánh . Tôi đã nổi loạn một nhánh câu chuyện (tức là branch_name) và quên phần câu chuyện. (tức là story/branch_name) và sau đó git spit lỗi này với tôi mà không có ý nghĩa nhiều trong bối cảnh này.


Chính xác là thế này. Gõ featureNamekhi chi nhánh thực sự được đặt tênfeatures/featureName
pkamb

3
Cũng là một ý tưởng tốt để tìm kiếm các lỗi chính tả đơn giản kỹ lưỡng hơn. Tôi đã vô tình hoán đổi hai chữ cái khi tạo chi nhánh và lỗi đánh máy này thực sự rất khó phát hiện.
Olga

25

Tôi đã chạy vào đây và nhận ra rằng tôi đã không tìm thấy ngược dòng trước khi cố gắng nổi loạn. Tất cả tôi cần làgit fetch upstream


10

Vấn đề là bạn đã tách ra khỏi một nhánh của .... nơi bạn đang cố gắng nổi loạn. Bạn không thể chuyển sang một nhánh không chứa cam kết mà nhánh hiện tại của bạn được tạo ban đầu.

Tôi đã nhận được điều này khi lần đầu tiên tôi khởi động lại một nhánh X cục bộ thành một Y bị đẩy, sau đó cố gắng khởi động lại một nhánh (lần đầu tiên được tạo trên X) sang một nhánh Y.

Giải quyết cho tôi bằng cách nổi loạn lên X.

Tôi không gặp vấn đề gì khi chuyển sang các chi nhánh từ xa (có khả năng thậm chí không được kiểm tra), miễn là chi nhánh hiện tại của tôi bắt nguồn từ tổ tiên của chi nhánh đó.


3
Bạn có thể rebase đến một chi nhánh như vậy với --onto. Mọi thứ bắt nguồn từ một số tổ tiên chung (đối với các kho lưu trữ bình thường), vì vậy đó không phải là vấn đề. Tôi đã nhận được lỗi này khi cố gắng khởi động lại fookhi tôi chưa tạo chi nhánh để theo dõi origin/foo.
cdunn2001

0

Đối với điều khiển từ xa origin:

$ echo "ref: refs/remotes/origin/master" > .git/refs/remotes/origin/HEAD

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.