2015-02-10 2 views
41

Есть ли хороший способ объяснить, как разрешить «! [rejected] master -> master (fetch first)'» в Git?! [отклонено] master -> master (fetch first)

Когда я использую эту команду $ git push origin master, отображается сообщение об ошибке.

! [rejected]  master -> master (fetch first) 
error: failed to push some refs to '[email protected]:zapnaa/abcappp.git' 
+0

Такая же проблема: D – core114

ответ

50

Ответ на этот вопрос, git сообщает, что вы сначала забираете.

Возможно, кто-то еще запустил мастер уже, и ваше сообщение позади. Поэтому вам нужно извлечь, объединить набор изменений, а затем снова нажать.

Если у вас нет (или что еще хуже, если вы вынудите его с помощью опции --force), вы можете испортить историю фиксации.

EDIT: Я подробно расскажу о последнем пункте, так как парень здесь просто дал очень плохой совет по использованию опции --force.

Поскольку git является DVCS, в идеале многие другие разработчики работают над тем же проектом, что и вы, используя тот же репозиторий (или его вилку). Если вы сильно перепишете свой набор изменений, ваш репозиторий будет не соответствовать другим людям, потому что «вы переписали историю». Вы сделаете других людей несчастными и пострадает репозиторий. Наверное, котенок в мире тоже будет плакать.

TL; DR

  1. Если вы хотите решить, принести первый (и затем слейте).
  2. Если вы хотите взломать, используйте опцию --force.

Вы все же попросили первого. Идите 1) всегда, даже если вы всегда будете использовать git самостоятельно, потому что это хорошая практика.

+0

Не удается удалить выборки важные изменения в локальных файлах? –

+0

Это не изменяется после извлечения – dhein

+0

@dhein, как я писал, за выборкой должно следовать слияние - дело в том, что вам нужно «выровнять» локальное дерево с удаленным деревом (следовательно, с помощью слияния) - но спасибо, я написал его в TL; DR тоже – linuxbandit

3

Попробуйте эту команду GIT

git push origin master --force 

или короткой силы -f

git push origin master -f

+0

Спасибо @ user1865618, git push origin master --force. эта команда спасла мое время –

+0

Приятно прочитать это, прочитав другие ответы, сказав: «Не делай этого, если не знаешь, что делаешь». :-) – Zeth

+0

Это перекрывает ограничение git push. Не рекомендуется для совместной работы.Из документации git push: _ Если кто-то еще построил поверх вашей первоначальной истории во время переустановки, кончик ветки на пульте дистанционного управления может продвигаться с ее фиксацией, а слепо толкать с помощью --force will_ ** теряет работу **. – Casey

16

Вы должны использовать git pull, that's команду сделать git fetch и рядом делают git merge.

Если вы используете команду git push origin master --force, у вас могут возникнуть проблемы в будущем.

+0

Правильно ли, что вы должны использовать только -force, если вы единственный в проекте, и вы расстраиваетесь, пытаясь сделать свой первый толчок? – Chrips

6

pull всегда правильный подход, но единственным исключением может быть, когда вы пытаетесь преобразовать файловую систему none-Git в репозиторий Github. Там вам придется принудительно вставить первый фиксатор.

git init 
git add README.md 
git add . 
git commit -m "first commit" 
git remote add origin https://github.com/userName/repoName.git 
git push --force origin master 
+0

работает для меня, я снова начал новый проект (тот же репо), и я хотел его заменить. – ucotta

15

попробовать:

git fetch origin master 
git merge origin master 

После к написал этот код, который я получил другую ошибку: (не быстрая перемотка вперед)

Я пишу этот код:

git fetch origin master:tmp 
git rebase tmp 
git push origin HEAD:master 
git branch -D tmp 

И разрешил мою проблему

+0

То же самое для меня. Это решило мою проблему. Есть несколько предупреждений. Я перепутал с дополнительным хранилищем, но решил это с помощью этого: http://stackoverflow.com/questions/19584255/what-does-a-grey-icon-in-remote-github-mean –

+0

Спасибо, он работает для меня – core114

0

It ' вероятно, что кто-то другой (например, ваш коллега) положил фиксации на origin/master, которые не находятся в вашей локальной ветке master, и вы пытаетесь вытолкнуть некоторые коммиты из своей локальной ветви на сервер. В 99% случаев, если вы не хотите удалять свою работу с origin, у вас есть два варианта:

2) Объедините их изменения в свою локальную ветвь, а затем нажмите объединенный результат. git checkout master git pull # resolve conflicts here git push

(Обратите внимание, что git pull по существу только git fetch и git merge в этом случае.)

1) Rebase местного отделения, так что он выглядит как ваш коллега сделали их фиксации первым, а затем вы сделали ваш совершает. Это сохраняет историю фиксации приятной и линейной - и позволяет избежать «слияния». Однако, если у вас есть конфликты с изменениями вашего коллеги, вам может понадобиться разрешить эти конфликты для каждого из ваших коммитов (а не только один раз) в худшем случае. По сути, это лучше для всех, но больше усилий для вас. git pull --rebase # resolve conflicts here git push

(Обратите внимание, что git pull --rebase по существу git fetch и git rebase origin/master.)

0

Иногда это происходит, когда вы дублировать файлы обычно README рода.

0

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

$ git clone --mirror git://example.com/some-big-repo.git 

Далее следуют коды соответственно:

Adding an existing project to GitHub using the command line

Даже если это не сработает, вы можете просто ввести код:

$ git push origin master --force 

или

$ git push origin master -f