Полностью застрял в git - "git push" не работает, а "git pull" не исправляет - PullRequest
2 голосов
/ 10 октября 2011

Я решил попробовать сегодня поработать с Git и узнать, как работает его ветвящаяся система. Плохая идея. Я каким-то образом попал в состояние, в котором я внес изменение в ветку, и когда я делаю "git push", я получаю:

To git@github.com:LAW/Repo.git
! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:LAW/Repo.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

Я видел это несколько раз, и я сделал "git pull", чтобы решить, хотя я не уверен, почему или как это разрешает вещи. Проблема в том, что сейчас это не работает. Я делаю "git pull" и получаю:

"Already up-to-date."

И проблема сохраняется. Итак, мой вопрос ... что теперь? Я не могу оттолкнуться от ветки, так что он по сути мертв, но в интернете нет лучшего совета, чем «мерзавец», чтобы это исправить. Излишне говорить, что это ОЧЕНЬ расстраивает!

EDIT Комментатор запросил вывод «git branch -a». Рассматриваемая ветка "PersonalSite"

* PersonalSite
master
remotes/origin/HEAD -> origin/master
remotes/origin/PersonalSite
remotes/origin/master

Ответы [ 3 ]

5 голосов
/ 11 октября 2011

Ваш отклоненный толчок - мастер -> мастер.Но ветвь, на которой вы находитесь, это PersonalSite.Похоже, ваша ветка master имеет локальный коммит, которого нет у удаленного, но отсутствует коммит с удаленного.Однако вы пытаетесь git pull на PersonalSite.Я не уверен, из какой ветки он пытается вытащить, вероятно origin/master (это зависит от исходной информации, которую вы могли настроить при создании ветки).git push не пытается выдвинуть PersonalSite, поскольку по умолчанию он только выдвигает «совпадающие» ветви (например, ветви, которые уже существуют с обеих сторон), а PersonalSite существует только локально.

Чего вы пытаетесь достичьВот?Если вы хотите передать PersonalSite на удаленный компьютер, используйте git push origin PersonalSite.Если вы хотите исправить основную ветку, проверьте ее, а затем запустите git pull (или все, что вы хотите сделать, чтобы исправить это).

4 голосов
/ 11 октября 2011

Вы должны иметь возможность просто обновить основную ветку:

git checkout master
git pull

Для проверки:

git checkout PersonalSite
git push # Should say "Everything up-to-date"
0 голосов
/ 11 октября 2011

Отклоняемая ветвь - это ветвь master. Вы находитесь не в ветке master, а в ветке PersonalSite, которая (как показывает вывод git pull) уже актуальна.

git push без дополнительных аргументов можно настроить по-разному (см. Раздел push.default в git help config). По умолчанию это выдвигает все соответствующие ветви. В этом случае он пытается отправить master, но ветвь master является , а не актуальной, поэтому принудительное завершение завершается неудачно. Сообщение об ошибке немного вводит в заблуждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...