git rebase fatal: Membutuhkan satu revisi

162

Saya memiliki cabang repositori publik dan saya mencoba memperbarui cabang saya dengan komit saat ini dari repositori asli:

$ 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>

Di <remote>tempat nama remote saya dan sebenarnya bukan nama remote saya. Dokumentasi tentang kesalahan ini tampaknya agak longgar.

jrlmx2
sumber
2
Saya mendapatkan kesalahan ini karena alasan yang tidak berhubungan - menggunakan "git rebase --interactive c4e9c94 ^" dari prompt perintah Windows. Itu mendorong saya "Lebih Banyak?", Dan terlepas dari bagaimana ia menjawab prompt, itu mengatakan "fatal: butuh revisi tunggal". Tetapi ketika saya menjalankan perintah yang sama dari bash, itu bekerja dengan baik.
Richard Beier
Sebagai catatan tambahan, bagi saya selain memiliki cabang hulu terdaftar dengan "jarak jauh", saya harus mengambil cabang tertentu yang ingin saya rebase. "git fetch <upstream> master". Hanya mengambil <upstream> dengan "git fetch <upstream>" masih akan memberi saya kesalahan ini.
Manisnya

Jawaban:

132

Anda harus memberikan nama cabang (atau pengidentifikasi komit lainnya), bukan nama remote git rebase.

Misalnya:

git rebase origin/master

tidak:

git rebase origin

Catatan, meskipun originharus menyelesaikan ref origin/HEADketika digunakan sebagai argumen di mana referensi komit diperlukan, tampaknya tidak setiap repositori mendapatkan referensi seperti itu sehingga mungkin tidak (dan dalam kasus Anda tidak) berfungsi. Membayar untuk menjadi eksplisit.

CB Bailey
sumber
2
Yang terakhir harus benar - benar bekerja - origindalam konteks referensi ditafsirkan sebagai origin/HEAD. Saya telah melihat repositori akhirnya tidak tahu apa origin/HEADitu, ...
Cascabel
1
@ Jeffromi: Saya khawatir saya tidak percaya, saya baru saja mencoba git rebase originrepositori tes (di mana originada a HEAD) dan saya mendapatkan kesalahan OP. Dokumentasi untuk rebase tidak mengatakan bahwa nama jarak jauh valid untuk <upstream>.
CB Bailey
1
@ Charles: Yah, itu mungkin bug? git rev-parse originberfungsi, seperti halnya git rebase origindalam klon git.git saya (dalam kasus rebase terkini, maju cepat, dan true, termasuk interaktif).
Cascabel
@Jefromi: Can Anda git describeAnda HEAD?
CB Bailey
@Charles: terbaru, v1.7.4-rc3! Saya tidak terlalu bersemangat untuk melakukan dua bagian mencari yang satu ini ...
Cascabel
28

Pastikan Anda mengeja nama cabang dengan benar . Saya rebasing cabang cerita (yaitu branch_name) dan lupa bagian cerita. (Yaitu story/branch_name) dan kemudian git ludah kesalahan ini pada saya yang tidak masuk akal dalam konteks ini.

ChrisJF
sumber
Persis seperti ini. Diketik featureNameketika cabang sebenarnya bernamafeatures/featureName
pkamb
3
Juga ide yang bagus untuk mencari kesalahan ketik yang lebih teliti. Saya tidak sengaja menukar dua huruf saat membuat cabang dan kesalahan ketik ini sangat sulit dikenali.
Olga
25

Saya mengalami ini dan menyadari saya tidak mengambil hulu sebelum mencoba untuk rebase. Yang saya butuhkan adalah untukgit fetch upstream

Mario Olivio Flores
sumber
10

Masalahnya adalah Anda bercabang dari .... di mana Anda mencoba untuk rebase. Anda tidak dapat rebase ke cabang yang tidak mengandung komit tempat cabang Anda saat ini dibuat.

Saya mendapatkan ini ketika saya pertama kali rebased cabang lokal X ke yang didorong Y, kemudian mencoba untuk rebase cabang (pertama kali dibuat pada X) ke yang didorong Y.

Dipecahkan untuk saya dengan rebasing ke X.

Saya tidak punya masalah rebasing ke cabang-cabang terpencil (bahkan berpotensi tidak diperiksa), asalkan cabang saya saat ini berasal dari leluhur cabang itu.

Maitreya
sumber
3
Anda dapat rebase ke cabang seperti itu dengan --onto. Semuanya turun dari beberapa nenek moyang (untuk repositori normal), sehingga tidak masalah. Saya mendapatkan kesalahan ini karena mencoba untuk rebase fooketika saya belum membuat cabang untuk dilacak origin/foo.
cdunn2001
0

Untuk jarak jauh origin:

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

git submodule deinit --all -f bekerja untukku.

Peshabi Deepesh
sumber