Git push с жалобой на отсутствие ускоренной перемотки вперед, даже если удаленный элемент был извлечен - PullRequest
4 голосов
/ 20 апреля 2011

Я пытаюсь перенести свои изменения в репозиторий на моем NAS.Это не так, как я не понимаю.

Документация гласит, что по умолчанию push работает только с ускоренными обновлениями.Справедливо.Поэтому я делаю git pull (мой пульт называется rubix):

D:\RoboCup\Dev\TinMan>git pull rubix master
From ssh://rubix/volume1/git/TinMan
 * branch            master     -> FETCH_HEAD
Already up-to-date.

Все выглядит хорошо.Давайте попробуем нажать ...

D:\RoboCup\Dev\TinMan>git push rubix master
To ssh://dnoakes@rubix/volume1/git/TinMan
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'ssh://dnoakes@rubix/volume1/git/TinMan'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.

Я прочитал документацию по git push, но на данный момент я не могу понять, почему я вижу эту проблему.

Здесьдругая контекстная информация:

D:\RoboCup\Dev\TinMan>git --version
git version 1.7.0.2.msysgit.0

D:\RoboCup\Dev\TinMan>git branch
* (no branch)
  master

Последняя строка выглядит подозрительно.Как я могу не быть ни на одной ветке?Также обратите внимание, что у меня есть некоторые неотслеживаемые файлы и измененные (не помеченные) изменения.

Любая помощь будет принята с благодарностью.Спасибо.

Ответы [ 4 ]

5 голосов
/ 20 апреля 2011

Вот один из способов синхронизации.

Сначала внесите любые изменения, затем используйте git log, чтобы отметить любые коммиты, которые вы хотели нажать.

Далее сбросьте ваш мастер, чтобы он соответствовал пульту, как это:

git checkout master
git reset --hard remotes/rubix/master 

Наконец, Черри выбирает коммиты, которые вы хотели сохранить

Пример:

git cherry-pick 111aaa111
git cherry-pick 123abc123

Теперь нажатие должно работать.

git push rubix master
2 голосов
/ 20 апреля 2011

Я не уверен, как вы оказались ни на одной ветке. Вы можете быть в середине перебазирования. Вы могли проверить коммит напрямую. В любом случае, это, вероятно, причина ваших проблем. Проверьте git reflog, чтобы увидеть, если он показывает какую-либо очевидную причину, и git log, чтобы увидеть, где вы находитесь. Посмотрите на измененные файлы с помощью git diff, чтобы решить, хотите ли вы сохранить их (и, если хотите, используйте git add . && git stash). Затем, если вы уверены, что вам не нужны какие-либо изменения или какая-либо текущая история, git checkout master, чтобы вернуться.

1 голос
/ 25 июля 2012

У меня была такая же проблема, и я столкнулся с этим вопросом, поэтому я решил опубликовать решение своей проблемы.

ПРИМЕЧАНИЕ: я использую git на Windows.

Я случайнопроверил мою локальную ветку с другим регистром: «Развивайся» вместо моего обычного «Развивайся».Ничто из того, что я сделал, не исправило бы проблему (даже после проверки ветви с правильным корпусом), пока я не выполнил следующие действия:

  1. Извлечение ветви с правильным корпусом "velop "
  2. Внесите любое изменение, добавьте / зафиксируйте
  3. Теперь вы можете нажимать без отклонения
1 голос
/ 10 июля 2012

Если это все еще не работает, вам, возможно, придется настроить свой git на прием псевдонима ветвления с именем

git config --global push.default upstream

По умолчанию, если имя удаленной ветки - origin / master ,git примет ваш push-запрос только в том случае, если имя вашей локальной ветви отслеживания master .Если вы создаете локальную ветвь отслеживания как master_xxx , git не примет ваш push, если вы не измените конфигурацию push.default на upstream .

...