отклоненный мастер -> мастер (без перемотки вперед)


218

Я пытаюсь выдвинуть мой проект (все файлы в новом хранилище). Я следую за шагами, но когда я нажимаю с, git push -u origin masterя получаю эту ошибку:

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:asantoya/projectnewbies.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.

Я получал эту ошибку много раз и не могу понять, что делать.


4
Если вы уверены, что у вашего локального мастера есть последние изменения, которые вы хотите на удаленном компьютере, выполните git push
--force

34
git push --force <remote_repository>работал на меня.
Сортировщик

@ Sorter - У меня была такая же проблема весь день, это помогло мне !! Спасибо. Но это не дает объяснения относительно того, почему проблема возникла в первую очередь и почему исправление сработало.
падаван

1
@pmr, просто легкомысленно спрашиваю, помогает ли ОП «прочитать сообщение об ошибке» вообще. Очевидно, что сообщение об ошибке не имело никакого смысла для ФП, равно как и не сообщало мне или другим 66 людям, которые проголосовали за его пост. Снарки, остроумные, хотя и не помогают людям вообще.
Падаван

3
@Padawan Вы также заметите, что этот «язвительный, остроумный человек» предоставил приемлемый ответ на этот вопрос, и 72 человека (возможно, включая вас) сочли его полезным. Мне жаль, что мой комментарий показался мне высокомерным, но это был бы мой первый вопрос, если бы вы задали мне этот вопрос и в профессиональном контексте. Иногда останавливаясь и внимательно читая сообщение об ошибке, иногда творишь чудеса. Я сделал для себя, когда я увидел эту ошибку в первый раз.
PMR

Ответы:


160

Как говорится в сообщении об ошибке: git pullпрежде чем пытаться git push. Очевидно, ваш локальный филиал не синхронизирован с вашим филиалом отслеживания.

В зависимости от правил проекта и вашего рабочего процесса вы также можете использовать git pull --rebase.


1
это показывает мне, что автоматическое объединение README.md автоматическое объединение не удалось; исправить конфликты, а затем зафиксировать результат.
Asantoya17

1
@ Asantoya17 Изменения, выполненные на удаленном главном сервере, конфликтуют с вашими изменениями. Просмотрите файл и просмотрите их. Затем зафиксируйте результаты решения. Пожалуйста, получите учебник или книгу или хотя бы прочитайте сообщения.
PMR

1
Что значит тянуть? Позволяет ли вам отправить файл или загрузить и загрузить файл с веб-сайта хранилища? (например, Bit Bucket)
Дэвид Дималанта

4
@AndrewS git push --force origin master. Если вы сталкивались с подобными проблемами более одного раза в жизни, ваш рабочий процесс проекта нарушается. Компоненты должны разрабатываться в ветвях и объединяться без быстрой пересылки, и если функция «потерпела неудачу», вы должны отменить фиксацию слияния (желательно сначала выполнить тестирование в ветви интеграции, прежде чем объединить компонент с мастером). Хотя понятия не имею об Затмении.
Пмр

1
Что делать, если эта ошибка сообщает git pull origin trunk:master?
Андри

175

ВНИМАНИЕ: никогда не рекомендуется использовать git. Это перезапишет изменения на пульте. Делайте это только в том случае, если вы на 100% знаете, что ваши локальные изменения должны быть переданы на удаленный мастер.

Попробуй это: git push -f origin master


47
Нет, не пытайся это. From git help push: «Это может привести к потере коммитов удаленным репозиторием; используйте его с осторожностью».
jcsahnwaldt Восстановить Монику

7
определенно не делайте этого
Lluís

14
это сработало для меня. Я подумал, что все в порядке, потому что мой единственный коммит на github был создан с новым репо. Вероятно, это хорошая идея, чтобы не использовать его после начала проекта.
Мэтью Мур

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

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

18

эта команда хорошо сработала для меня

git push -f origin master

3
Будьте осторожны перед использованием этой команды. Используя эту команду, вы потеряете все свои прошлые коммиты.
twenk11k

означает -f означает силу толчка
maheshmnj

@maheshmnj Да!
тестируемый

15

Я только что получил эту ошибку.

Я создал репозиторий github после создания своего локального репозитория git, поэтому мне нужно было принять изменения в локальный, прежде чем отправлять их в github. В этом случае единственным изменением был файл readme, созданный как необязательный шаг при создании репозитория github.

git pull https://github.com/*username*/*repository*.git master

URL-адрес хранилища можно найти здесь, на странице проекта github:

введите описание изображения здесь

Я тогда повторно инициализировал (это может не быть необходимым)

git init
git add .
git commit -m "update"

Затем нажмите:

git push

3
Этот ответ отражает реальный сценарий дела.
KTA

9

Я создал новый репо в GitHub, и у меня была та же проблема, но у него также были проблемы при извлечении, так что это сработало для меня.

но это не рекомендуется в репозиториях, которые уже имеют много кодов, так как это может испортить все

git push origin master --force

Этот ответ уже дан: stackoverflow.com/a/16374574/1771479 и не рекомендуется делать.
agold

9

ПРЕДУПРЕЖДЕНИЕ:

Переход на ' git pull' не всегда решение, так что будьте осторожны. Вы можете столкнуться с этой проблемой (той, которая упоминается в Q), если вы намеренно изменили историю своего хранилища. В этом случае git путает ваши изменения истории с новыми изменениями в вашем удаленном репо. Таким образом, вы должны пойти на git push --force, потому что вызов git pullбудет преднамеренно отменять все изменения, которые вы сделали в вашей истории.


8

Если git pullэто не помогает, то, вероятно, вы выдвинули свои изменения (A) и после этого использовали git commit --amendдля добавления еще некоторых изменений (B). Поэтому git думает, что вы можете потерять историю - он интерпретирует B как другой коммит, несмотря на то, что содержит все изменения из A.

             B
            /
        ---X---A

Если никто не меняет репо после A, то вы можете это сделать git push --force.

Однако, если есть изменения после Aдругого человека:

             B
            /
        ---X---A---C

то вы должны перебазироваться , что лица , изменения от Aдо B( C-> D).

             B---D
            /
        ---X---A---C

или исправить проблему вручную. Я еще не думал, как это сделать.


7

используйте эту команду:

git pull --allow-unrelated-histories <nick name of repository> <branch name>

лайк:

git pull --allow-unrelated-histories origin master

эта ошибка возникает, когда проекты не имеют общего предка.


7
git push -f origin master

использовать грубую силу ;-) Скорее всего, вы пытаетесь добавить локальную папку, которую вы создали до создания репозитория в git.


2
Любой ответ, включая этот, должен давать предупреждение.
Д. Бен Кнобл

1
Я попробовал это, и это стоило мне много коммитов на GitHub, которые мне пришлось восстанавливать из другого локального клона репо. Dangerous.
Paflow

6

Это потому, что вы сделали некоторые изменения в своем мастере, поэтому проект попросит вас сначала потянуть. Если вы все равно хотите его подтолкнуть, вы можете использовать грубую силу, набрав:

git push -f origin master

Не забудьте сначала зафиксировать ваши изменения:

git add .
git commit -m "Your commit message"


4

Вам нужно сделать

git branch

если вывод что-то вроде:

* (no branch)
master

тогда делай

git checkout master

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


4

! [отклонено] мастер -> мастер (без перемотки вперед)

Не паникуйте, это очень легко исправить. Все, что вам нужно сделать, это выполнить тягу, и ваша ветвь будет ускорена:

$ git pull myrepo master

Затем повторите попытку и все должно быть в порядке:

$ git push github master


4

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

Поэтому, когда я пытался выполнить команду git push из ветки разработки, у меня была эта ошибка.

Я исправил это, переключившись на главную ветку, git pull, а затем вернулся к разработке ветки и git push.

$ git fetch && git checkout master
$ git pull
$ git fetch && git checkout develop
$ git push

3

У меня была эта проблема на машине разработки. devФилиал толкал штраф , но masterветвь дала мне ( в то время как git pushING , когда находясь на devветке):

! [rejected]        master -> master (non-fast-forward)

Итак, я попробовал:

git checkout master
git pull

Который дал мне:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me, either.

Я обнаружил, что главная ветка отсутствует, .git/configи добавил:

[branch "master"]
    remote = origin
    merge = refs/heads/master

После этого git pushтакже хорошо работал на devветке.


2

Мой пульт не был синхронизирован с локальным, поэтому у меня это сработало

git pull --rebase

и убедитесь, что когда вы делаете это git pullснова, он должен сказать «Уже в курсе», и теперь вы готовы нажать на источник

при условии, что вы уже git remote add origin remote repository URL

делать

`git push origin master`  

Скриншот говорит обо всем введите описание изображения здесь

Или вы можете сделать это

  1. git stash (временно хранит незагрязненную работу)
  2. git pull (сделайте ваши локальные и удаленные синхронизированными)
  3. git stash pop (верните вам незафиксированные изменения)
  4. мерзавец

1

У меня было так же, как вопрос. Я использую Git Totoise. Просто щелкните правой кнопкой мыши -> TotoiseGit -> Очистить. Теперь вы можете подтолкнуть к Github Это работало нормально со мной: D


1

Это потому, что вы внесли противоречивые изменения в его хозяина. И ваш сервер репозитория не может сказать вам это с этими словами, поэтому он выдает эту ошибку, потому что он не имеет отношения к этим конфликтам для вас, поэтому он просит вас сделать это самостоятельно. Так как ?

1- git pull Это объединит ваш код из вашего хранилища с вашим кодом мастера сайта. Так что конфликты проявляются.

2- лечить эти конфликты вручную.

3-

git push origin master

И до того, ваша проблема была решена.


0

Единственное, что мне удалось решить - это удалить локальный репозиторий и репозиторий git и снова создать его на обоих концах. Пока работает отлично.


Я всегда сохраняю резервную копию моего git-репо в Dropbox. Таким образом, мне не нужно удалять локальное хранилище, я просто копирую и вставляю соответствующие каталоги из Dropbox, когда возникает такая ситуация.
Игорь Ганапольский

0

Если у кого-то есть эта ошибка при попытке нажать на heroku, тогда просто замените 'origin' на 'heroku' следующим образом: git push -f heroku master



0

Это также может быть вызвано некоторой ошибкой имени, возникшей при присвоении имени Репо. Если какой-либо из приведенных выше ответов не сработал. Это сработало для меня:

Удалите этот репозиторий, создайте новый и повторите следующие команды:

cd 'Local Directory Path'
git remote add origin *your_git_name.git*
git push -u origin master

если добавление исходных шоу уже существует, используйте вместо этого:

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