! [отклонено] мастер -> мастер (сначала получить)


102

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

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

! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:zapnaa/abcappp.git'

Ответы:


133

Ответ есть, git говорит вам сначала получить.

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

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

РЕДАКТИРОВАТЬ: Я подробнее расскажу о последнем пункте, так как парень здесь только что дал Очень плохой совет по использованию этой --forceопции.

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

TL; DR

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

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


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

2
Он не меняется после получения
dhein

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

89

пытаться:

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

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


Мне то же. Это решило мою проблему. Есть пара предупреждений. Я испортил вспомогательный репозиторий, но решил это следующим образом: stackoverflow.com/questions/19584255/…
М. Босолей,

1
@Aurelio A Ваша команда слияния неверна, так и должно быть git merge master.
Майк

Почему нам нужно использовать git branch -D tmp?
Милош Вељковић

27

Вы должны использовать git pullэту команду, git fetchа затем выполните git merge.

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


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

20

pull - всегда правильный подход, но может быть одно исключение, когда вы пытаетесь преобразовать файловую систему без 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

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

18

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

git push origin master --force

или нехватка силы -f

git push origin master -f


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

10

Как указано в сообщении об ошибке, вы должны сначала выполнить выборку. Это сработало для меня. Используйте команду:

  1. git fetch origin master

Затем выполните следующие действия для объединения:

  1. git pull origin master
  2. git add .
  3. git commit -m 'your commit message'
  4. git push origin master


3

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

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

Затем следуйте кодам соответственно:

Добавление существующего проекта в GitHub с помощью командной строки

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

$ git push origin master --force 

или

$ git push origin master -f

3

Следуйте инструкциям ниже, так как у меня была такая же проблема:

$ git pull origin master --allow-unrelated-histories 

(Чтобы узнать, можно ли легко объединить локальную ветку с удаленной)

$ git push -u origin master 

(Теперь отправьте все содержимое локального репозитория git в ваш онлайн-репозиторий)


2

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

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

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

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

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



1

Ваша ошибка может быть из-за ветки слияния.
Просто следуйте этому:

шаг 1: git pull origin master(если вы получили какое-либо сообщение, проигнорируйте его)
шаг 2: git add .
шаг 3: git commit -m 'your commit message'
шаг 4:git push origin master


1

Сначала вы должны использовать git pull, затем команду do, git fetchа затем выполните слияние git.

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


1

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

# git checkout -b newbranch <SHA of master>

# git branch
* newbranch
  master

# git push -u <repo_url_alias> newbranch

У вас осталось 2 ветки: Master и newbranch, которые вы можете объединить позже.


0

Вам просто нужно указать имя своей ветки вместе с удаленным именем.

git fetch origin
git merge origin/master

0

Причина, по которой это произошло в моем случае, заключалась в том, что при создании ссылки GitHub rep я инициализировал ее файлом README

При создании удаленного Git не инициализируйте его файлом README, иначе он покажет ошибку

Не делайте этого, и он определенно будет работать нормально. Вместо этого инициализируйте его с помощью файла readme, если хотите, после нажатия на главную ветку


0

Это сработало для меня, так как ни одно из других решений не помогло мне. НЕ ДАЖЕ СИЛА!

https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/resolving-a-merge-conflict-using-the-command-line

Просто нужно было пройти Git Bash

cd REPOSITORY-NAME
git add .
git commit -m "Resolved merge conflict by incorporating both suggestions."

Затем вернемся к моему cmd, и я мог: git push heroku masterчто в моем случае было проблемой.



0

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

! [отклонено] master -> master (сначала загрузить) ошибка: не удалось отправить некоторые ссылки на 'git@github.com:'

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

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






-1

Задача решена

Проблема у меня была

! [rejected]        master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/repo_name/repo-hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g.hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

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

  1. git fetch origin master

    выход: From https://github.com/username/repo-name * branch master -> FETCH_HEAD

  2. git merge origin master

    выход: Merge made by the 'recursive' strategy. repo-name/ReadMe.md | 1 - 1 file changed, 1 deletion(-)

  3. git push

    выход: Enumerating objects: 8, done. Counting objects: 100% (8/8), done. Delta compression using up to 8 threads Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 1.00 KiB | 1.00 MiB/s, done. Total 6 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 1 local object. To https://github.com/user_name/repo-name.git 0852d5vf..70v56d9 master -> master

Большое спасибо

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