git: обновления были отклонены, поскольку удаленный элемент содержит работу, которую вы не используете локально

Я работаю над командой с несколькими разработчиками, использующими git на BitBucket. Мы все работаем над веткой dev, а не нажимаем на master до выпуска.

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

 ! [rejected]        master -> dev (fetch first)
error: failed to push some refs to 'https://[email protected]/repo_user/repo_name.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

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

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

Это команды, которые я запускаю для фиксации, если это помогает кому-то:

git pull remotename master:dev
git add --all
git commit -m "some message"
git pull remotename master:dev
git push remotename master:dev

Я бы подумал, что если я сохраню этот порядок, я не получу конфликтов слияния. Наверное, я ошибся. еще раз спасибо

Обновление: я должен добавить, что я искал несколько часов в Google и stackoverflow и выполнял разные инструкции, но я до сих пор не могу push на ветку dev.

Ответ 1

git pull <remote> master:dev будет извлекать ветвь remote/master и объединить ее в local/dev ветвь local/dev.

git pull <remote> dev будет извлекать ветвь remote/dev и объединить ее в вашу текущую ветку.

Я думаю, вы сказали, что конфликтная фиксация находится на remote/dev, так что это ветка, которую вы, вероятно, намеревались извлечь и слить.

В этом случае вы фактически не сливали конфликт в свою локальную ветку, что довольно странно, поскольку вы сказали, что видите неправильный код в своей рабочей копии. Возможно, вы захотите проверить, что происходит в remote/master.

Ответ 2

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

git push -f оригинал

Ответ 3

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

git отклоняет обновление

поскольку мы не использовали обновленный удаленный доступ в нашей локальной среде. Итак, возьмите сначала с дистанции

git pull

Он обновит ваш локальный репозиторий и добавит новый файл Readme. Затем нажмите обновленные изменения на удаленный

git push origin master

Ответ 4

Я исправил это, я не совсем уверен, что я сделал. Я попробовал просто нажать и потянуть, используя:

git pull <remote> dev вместо git pull <remote> master:dev

Надеюсь, это поможет кому-то, если у них будет такая же проблема.

Ответ 5

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

: git pull

а потом..

: git push

Примечание: если вы случайно застряли в редакторе vim после извлечения хранилища, не беспокойтесь, просто закройте редактор vim и попробуйте нажать :)

Ответ 6

У меня была эта ошибка, и это произошло потому, что на сервере было обновление, но SourceTree не показывал никаких доступных обновлений (возможно, потому, что я был в отключенном состоянии, когда он последний раз проверял). Таким образом, я сделал обновление в исходном дереве, и теперь он показывает 2 элемента, чтобы нажать вместо 1 элемента.

Поэтому не забудьте нажать " Обновить" или " Потянуть", если вы получите эту ошибку, а затем повторите попытку.

Ответ 7

Вам нужно ввести:

$ git pull
$ git fetch 
$ git merge

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

Ответ 8

Заставить толкать

git push -f мастер оригинала

Ответ 9

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

Так что создайте тягу с пульта

git pull origin master

Затем нажмите изменения на этом пульте

git push origin master

Ответ 10

У меня был проект SSDT VS первым. Я хотел подтолкнуть проект, как у меня был на Github. Я хотел, чтобы этот толчок был начальной версией моего репо, запускающего основную ветку. Дональское предложение мастера происхождения git push -f было самым простым способом (который я видел) для достижения этой цели. Поскольку мне не пришлось беспокоиться о переписывании чего-либо, это имело смысл.

Ответ 11

Вы можете попробовать это: git pull origin master --rebase