git rebase fatal: potrzebna jest jedna poprawka

162

Mam gałąź repozytorium publicznego i próbuję zaktualizować moją gałąź bieżącymi commits z oryginalnego repozytorium:

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

To <remote>jest miejsce mojej zdalnej nazwy i tak naprawdę nie jest moją zdalną nazwą. Dokumentacja dotycząca tego błędu wydaje się być nieco luźna.

jrlmx2
źródło
2
Otrzymałem ten błąd z niepowiązanego powodu - używając polecenia „git rebase --interactive c4e9c94 ^” z wiersza poleceń systemu Windows. Podpowiedział mi „Więcej?” I niezależnie od tego, w jaki sposób odpowiedział na monit, brzmiał „fatalny: potrzebna pojedyncza korekta”. Ale kiedy uruchomiłem to samo polecenie z basha, zadziałało dobrze.
Richard Beier
Na marginesie, oprócz tego, że gałąź upstream była wymieniona jako „zdalna”, musiałem pobrać konkretną gałąź, na której chciałem ponownie bazować. „git fetch <upstream> master”. Pobieranie tylko <upstream> z „git fetch <upstream>” nadal powodowałoby ten błąd.
Słodycz

Odpowiedzi:

132

Musisz podać nazwę gałęzi (lub inny identyfikator zatwierdzenia), a nie nazwę zdalnego do git rebase.

Na przykład:

git rebase origin/master

nie:

git rebase origin

Uwaga, chociaż originpowinno być rozwiązywane do ref, origin/HEADgdy jest używane jako argument, gdy wymagane jest odwołanie do zatwierdzenia, wydaje się, że nie każde repozytorium uzyskuje takie odniesienie, więc może nie działać (iw twoim przypadku). Opłaca się mówić wprost.

CB Bailey
źródło
2
To drugie powinno faktycznie działać - originw kontekście referencyjnym jest interpretowane jako origin/HEAD. Widziałem jednak, że repozytoria nie wiedzą, co to origin/HEADjest ...
Cascabel,
1
@Jefromi: Obawiam się, że ci nie wierzę, właśnie wypróbowałem git rebase originna repozytorium testowym (gdzie originjest a HEAD) i otrzymuję błąd OP. Dokumentacja dla rebase nie mówi, że zdalna nazwa jest poprawna dla <upstream>.
CB Bailey,
1
@Charles: Cóż, to może być błąd? git rev-parse origindziała, podobnie jak git rebase originw moim klonie git.git (w aktualnym, przewijającym się do przodu i prawdziwym przypadku rebase, w tym interaktywnym).
Cascabel
@Jefromi: Można git describeswój HEAD?
CB Bailey,
@Charles: aktualne, v1.7.4-rc3! Nie jestem strasznie chętny do zrobienia połowy, szukając tego ...
Cascabel,
28

Sprawdź, czy nazwa gałęzi została wpisana poprawnie . Przebudowywałem gałąź fabularną (tj. branch_name) I zapomniałem o części fabularnej. (tj. story/branch_name) a potem git wypluł na mnie ten błąd, który nie miał większego sensu w tym kontekście.

ChrisJF
źródło
Dokładnie to. Wpisane, featureNamegdy gałąź jest faktycznie nazwanafeatures/featureName
pkamb
3
Dobrym pomysłem jest również dokładniejsze wyszukanie prostych literówek. Przypadkowo zamieniłem dwie litery podczas tworzenia gałęzi i ta literówka była naprawdę trudna do zauważenia.
Olga
25

Wpadłem na to i zdałem sobie sprawę, że nie pobrałem upstream przed próbą zmiany bazy. Potrzebowałem tylkogit fetch upstream

Mario Olivio Flores
źródło
10

Problem polega na tym, że rozgałęziłeś się od ... miejsca, do którego próbujesz zmienić bazę. Nie możesz ponownie bazować na gałęzi, która nie zawiera zatwierdzenia, na którym została pierwotnie utworzona twoja bieżąca gałąź.

Otrzymałem to, gdy po raz pierwszy zmieniłem bazę lokalnego oddziału X na wypchnięty jeden Y, a następnie próbowałem zmienić bazę gałęzi (najpierw utworzonej na X) na wypchniętą Y.

Rozwiązany dla mnie przez zmianę bazy na X.

Nie mam problemu ze zmianą bazy na zdalne gałęzie (potencjalnie nawet nie wyrejestrowane), pod warunkiem, że moja obecna gałąź pochodzi od przodka tej gałęzi.

Maitreya
źródło
3
Możesz przenieść się do takiej gałęzi za pomocą --onto. Wszystko pochodzi od jakiegoś wspólnego przodka (dla normalnych repozytoriów), więc to nie jest problem. Otrzymałem ten błąd podczas próby zmiany bazy danych, foogdy nie utworzyłem jeszcze gałęzi do śledzenia origin/foo.
cdunn2001
0

Dla pilota origin:

$ echo "ref: refs/remotes/origin/master" > .git/refs/remotes/origin/HEAD
Jani
źródło
0

git submodule deinit --all -f pracował dla mnie.

Deepesh Panjabi
źródło