git rebase fatal: требуется одна ревизия


162

У меня есть ветвь публичного репозитория, и я пытаюсь обновить свою ветку текущими коммитами из исходного репозитория:

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

Это <remote>вместо моего удаленного имени и на самом деле не мое удаленное имя. Документация по этой ошибке кажется немного свободной.


2
Я получил эту ошибку по несвязанной причине - используя «git rebase --interactive c4e9c94 ^» из командной строки Windows. Он подсказал мне «Больше?», И независимо от того, как он ответил на приглашение, он сказал «фатально: нужна одна ревизия». Но когда я запускал ту же команду из bash, она работала нормально.
Ричард Бейер

В качестве дополнительного примечания, для меня в дополнение к вышестоящей ветке, перечисленной с «удаленным», я должен был выбрать конкретную ветку, на которую я хотел бы перебазировать. "git fetch <upstream> master". Извлечение только <upstream> с помощью «git fetch <upstream>» все равно дало бы мне эту ошибку.
Сладость

Ответы:


133

Вам необходимо указать имя ветви (или другой идентификатор фиксации), а не имя удаленного пользователя git rebase.

Например:

git rebase origin/master

не:

git rebase origin

Обратите внимание, что хотя originссылка должна указывать на origin/HEADссылку при использовании в качестве аргумента, где требуется ссылка на коммит, похоже, что не каждый репозиторий получает такую ​​ссылку, поэтому он может не работать (и в вашем случае не работает). Это платит, чтобы быть явным.


2
Последнее действительно должно работать - originв контексте ref интерпретируется как origin/HEAD. Я видел, как хранилища заканчивали тем, что не знали, что это origin/HEADтакое ...
Каскабель

1
@Jefromi: я боюсь, что не верю тебе, я только что попробовал git rebase originна тестовом репозитории (где originесть HEAD), и я получаю ошибку ОП. В документации для rebase не сказано, что удаленное имя действительно для <upstream>.
CB Bailey

1
@ Чарльз: Ну, это может быть ошибка? git rev-parse originработает, как и git rebase originв моем клоне git.git (в актуальном, ускоренном и истинном случае перебазирования, включая интерактивный).
Каскабель

@Jefromi: Можете ли вы git describeваши HEAD?
CB Bailey

@Charles: актуально, v1.7.4-rc3! Я не очень хочу сделать биссект в поисках этого ...
Каскабель

28

Проверьте правильность написания имени ветви . Я перебирал ветку истории (то есть branch_name) и забыл часть истории. (то есть story/branch_name), а затем git плюнул мне в эту ошибку, которая не имела особого смысла в этом контексте.


Именно это. Напечатано, featureNameкогда ветка фактически названаfeatures/featureName
pkamb

3
Также хорошая идея, чтобы искать простые опечатки более тщательно. Я случайно поменял две буквы при создании ветки, и эту опечатку было действительно трудно обнаружить.
Ольга

25

Я столкнулся с этим и понял, что я не получил вверх по течению, прежде чем пытаться перебазировать. Все что мне нужно былоgit fetch upstream


10

Проблема в том, что вы разветвились от ветки ...., где вы пытаетесь сделать ребазинг. Вы не можете перейти на ветку, которая не содержит фиксацию, на которой ваша текущая ветка была изначально создана.

Я получил это, когда я сначала переместил локальную ветвь X в нажатую Y, а затем попытался перебазировать ветку (сначала созданную в X) в нажатую Y.

Решил для меня, перебрав на X.

У меня нет проблем с перебазированием в удаленные ветви (возможно, даже не проверенные), при условии, что моя текущая ветвь происходит от предка этой ветки.


3
Вы можете перейти на такую ​​ветку с помощью --onto. Все происходит от какого-то общего предка (для обычных репозиториев), так что это не проблема. Я получил эту ошибку от попытки сделать ребаз, fooкогда я еще не создал ветку для отслеживания origin/foo.
cdunn2001

0

Для удаленного origin:

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.