Не могу нажать на GitHub - продолжает говорить о необходимости слияния

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

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

Я еще ничего не нажал в репозитории, поэтому зачем мне что-то тянуть?

Ответ 1

Это может привести к тому, что удаленный репозиторий потеряет фиксации; используйте его с осторожностью.

Если вы не хотите объединять удаленную ветвь в свою локальную ветвь (см. раздел "git diff) и хотите сделать принудительное нажатие, используйте команда push с -f

git push -f origin <branch>

где origin - это имя вашего remote репо.

Обычно команда отказывается обновлять удаленный реф, который не является предком локального ref, используемого для его перезаписывания. Этот флаг отключает проверку. Это может привести к тому, что удаленный репозиторий потеряет фиксации; используйте его с осторожностью.

Ответ 2

Как говорится в сообщении,

Объединить удаленные изменения (например, 'git pull')

Используйте git pull, чтобы вытащить последние изменения из удаленного репозитория в локальный репозиторий. В этом случае для вытягивания изменений потребуется слияние, потому что вы внесли изменения в свой локальный репозиторий.

Я приведу пример и картинку для объяснения. Предположим, что ваше последнее притяжение из источника/ветки было в Commit B. Вы выполнили и совершили некоторую работу (Commit C). В то же время кто-то еще завершил свою работу и отодвинул ее в начало/отделение (Commit D). Между этими двумя ветками должно быть слияние.

local branch:                         --- Commit C 
                                    /
                                   /
                                  /
origin/branch: Commit A ------ Commit B ---- Commit D

Поскольку вы хотите нажать, Git заставляет вас выполнить слияние. Для этого сначала нужно перенести изменения из начала/ветки.

local branch:                         --- Commit C -- Commit E
                                    /               /           
                                   /               /             
                                  /               /               
origin/branch: Commit A ------ Commit B ---- Commit D 

После завершения слияния вам будет разрешено ускорить перемотку вперед/ветвь в Commit E, нажав ваши изменения.

Git требует, чтобы вы обрабатывали слияния самостоятельно, потому что слияние может привести к конфликтам.

Ответ 3

Вы обновили свой код перед нажатием?

Используйте git pull origin master, прежде чем нажимать что-нибудь.

Я предполагаю, что вы используете origin как имя для своего пульта.

Вам нужно вытащить до нажатия, чтобы обновить свой локальный репозиторий до того, как вы нажмете что-нибудь (на всякий случай кто-то уже обновил код на github.com). Это помогает в разрешении конфликтов локально.

Ответ 4

Обычно это происходит, когда вы git commit и пытаетесь изменить git push до git pulling на этой ветке x, где кто-то еще уже внес изменения.

Нормальный поток будет таким, как показано ниже,

ШАГ 1: git stash ваши локальные незафиксированные изменения в этой ветке.

ШАГ 2: git pull origin branch_name -v до pull and merge для локально зафиксированных изменений в этой ветке (дайте это слияние некоторого сообщения и исправьте конфликты, если они есть.)

ШАГ 3: git stash pop изменения stash ed (Затем вы можете совершать коммиты по всплываемым файлам, если хотите, или перенести уже зафиксированные изменения (STEP4), и вносить новые фиксации в файлы позже.)

ШАГ 4: git push origin branch_name -v объединенные изменения.

Замените branch_name на master (для ветки master).

Ответ 5

Иногда мы забыли вытащить и сделали много работ в локальной среде.

Если кто-то хочет нажать без притяжения,

git push --force

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

Ответ 6

Первое и простое решение

  • Попробуйте эту команду git push -f origin master.
  • Эта команда принудительно сделает все изменения, необходимые для вашего хранилища.

Рекомендуемое решение

  • Запустите эти команды:
git pull --allow-unrelated-histories  //this might give you error but nothing to worry, next cmd will fix it
git add *
git commit -m "commit message"
git push

Если это не сработает, следуйте 🔰

  • Удалить каталог .git из папки.
  • Затем выполните эти команды:

    git init
    git add .
    git commit -m "First Commit"
    git remote add origin [url]
    git push -u origin master
    

ИЛИ ЖЕ

git push -f origin master 

Используйте git push -f origin master если -u не работает для вас.

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

Ответ 7

Некоторые из вас могут получить эту ошибку, потому что Git не знает, какую ветвь вы пытаетесь нажать.

Если ваше сообщение об ошибке также включает

error: failed to push some refs to '[email protected]:jkubicek/my_proj.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. If you did not intend to push that branch, you may want to
hint: specify branches to push or set the 'push.default' configuration
hint: variable to 'current' or 'upstream' to push only the current branch.

то вы можете захотеть последовать за удобными советами от Jim Kubicek, Настроить Git Только Push Current Branch, чтобы установить ветвь по умолчанию к текущему.

git config --global push.default current

Ответ 8

git pull origin branch_name --rebase

Это сработало для меня - команда git pull origin branch_name --rebase извлечет изменения из удаленного имя_в ветки, а затем rebase текущую ветку сверху.

Ответ 9

У меня была та же проблема, что я сделал, я сначала толкнул его с помощью этого

git push --force

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

Ответ 10

В дополнение к ответам выше, для меня работало следующее: -

Сценарий -

  • Я успешно нажал my_branch в исходное состояние.
  • Я сделал несколько изменений.
  • Когда я попытался снова нажать (после добавления, совершить, конечно), я получил вышеупомянутую ошибку.

Решение -

 1. git checkout **my_branch**
 2. git add, commit your changes.
 3. git pull origin **my_branch** (not origin, master, or develop)
 4. git push origin **my_branch**

Доказательство

Ответ 11

Я упомянул об этом в своем учебнике, Как использовать GitHub: учебник для начинающих.

Когда вы создаете новый репозиторий в GitHub, GitHub может попросить вас создать файл readme. Если вы создаете файл readme непосредственно на GitHub, тогда вам нужно сначала сделать запрос на извлечение до того, как запрос push будет успешным. Эти команды будут "вытаскивать удаленный репозиторий, объединять его с вашими текущими файлами, а затем" выталкивать все файлы обратно в GitHub:

git pull https://github.com/thomas07vt/MyFirstRepo.git master

git push https://github.com/thomas07vt/MyFirstRepo.git master

Ответ 12

Я получил вышеупомянутое сообщение об ошибке, когда попытался нажать мою текущую ветвь foobar:

git checkout foobar
git push origin foo

Оказывается, у меня было две локальные ветки, отслеживающие одну и ту же удаленную ветку:

foo -> origin/foo (some old branch)
foobar -> origin/foo (my current working branch)

Это помогло мне нажать мою текущую ветку, используя:

git push origin foobar:foo

... и для очистки с помощью git branch -d

Ответ 13

git push -f origin branchname

Используйте приведенную выше команду только в том случае, если вы уверены, что вам не нужен удаленный код ветвления, иначе слейте сначала, а затем нажмите код

Ответ 14

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

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

Для людей, которые скажут мне, что это неправильно, не приводя никаких последствий, или люди, которые говорят мне использовать команду, которая вызывает у меня будущие неприятности, я говорю: "Этот метод буквально занимает у меня меньше 10 секунд". Если я столкнулся с командой git, которая занимает менее 10 секунд для реализации и имеет тот же самый эффект, я буду принимать это. До тех пор я использую этот метод.

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

Ответ 15

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

Ответ 16

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

В моем локальном "хозяине"

git fetch upstream
git merge upstream/master --ff-only

, затем обратно в мою локальную ветвь

git rebase master

Это хорошо работает для предыдущего потока git, но не с github. Проблема git rebase заключалась в возникновении проблем с синхронизацией (и я признаю, что что-то мне пришлось принять без полного понимания) и, к сожалению, поставил меня в положение, когда git push -f стал, вероятно, самым легким вариантом. Нехорошо.

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

В моей локальной ветке

git fetch upstream
git merge upstream/master

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

Как вы, вероятно, можете сказать, я не эксперт git, но я уверенно информирован о том, что этот рабочий процесс, вероятно, избежит конкретных проблем, которые у меня были.

Ответ 17

вы можете использовать команду push -f, если вы вносите изменения в уже перенесенный коммит. Это работа для меня.

>$ git push -f

Изменить: Обычно команда отказывается обновлять удаленный реф, который не является предком локального ref, используемого для его перезаписывания. Этот флаг отключает проверку. Это может привести к тому, что удаленный репозиторий потеряет фиксации; используйте его с осторожностью.

Ответ 18

Является ли ваше имя ветки таким же, как имя удаленной ветки?

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

Предположим, что удаленная ветка, которую вы хотите нажать, - [тестирование], а ваша локальная ветвь называется [test].

Если вы не находитесь в тестовой ветке, сначала переключитесь на нее.

git checkout test

Затем откройте новую ветку и назовите ее тестирование.

git checkout -b testing

Теперь пришло время нажать его:

git push [remote repo] testing

Ответ 19

В моем случае у меня была "mybranch", и я сделал git pull, поэтому я не мог понять, почему push не работал. В конце концов, я понял, что я толкаю неправильную ветку. Я набрал git push origin master вместо git push origin mybranch.

Итак, если вы уже сделали git pull и все еще получаете это сообщение, убедитесь, что вы нажимаете правильную ветку.

Ответ 20

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

Мое решение: проверьте правильную ветку, вишни выберите фиксацию из другой локальной ветки, git pull и git нажмите

Ответ 21

Я разрешаю эту проблему в моем репозитории GIT. Нет необходимости rebase или force совершить в этом случае. Для решения этой проблемы выполните следующие действия:

local_barnch> git branch --set-upstream to=origin/<local_branch_name> 

local_barnch>git pull origin <local_branch_name>

local_barnch> git branch --set-upstream to=origin/master

local_barnch>git push origin <local_branch_name>

надеюсь, что это поможет.

Ответ 22

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

git clone --bare <source repo path> <target bare repo path>

Ответ 23

Другим решением является продвижение головки пульта, сделав еще одну фиксацию, если сможете. После того, как вы перетащите эту расширенную голову в локальное поддерево, вы сможете снова нажать ее.

Ответ 24

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

Тогда это, вероятно, произошло, вы использовали git commit --amend

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

Учебник ATLASSIAN: история перезаписи

Однако не рекомендуется выполнять git commit --amend , если вы уже нажали коммит на GitHub, это потому, что "изменение не просто изменяет последнюю фиксацию, а заменяет ее полностью". Git, он будет выглядеть как новый новый коммит ", что означает для другого разработчика в вашем GitHub, история выглядит как A- > B- > C, но для вас это выглядит как A- > B- > D, если GitHub позволяет вам push, всем остальным придется вручную исправить свою историю

Вот почему вы получаете сообщение об ошибке ! [rejected] master -> master (non-fast-forward), если вы знаете, что никто не потянул ваше последнее изменение, вы можете сделать git push --force, это будет изменить историю git в вашей общедоступной Сделки рЕПО. В противном случае... вы можете выполнить git pull, но я считаю, что это будет иметь тот же результат, что и вы не прошли через git commit --amend, он создаст новую фиксацию (т.е.: git история после git pull: A- > B- > C- > D)

для более подробной информации: Как изменить последнее коммит

Ответ 25

Другой вариант: локально переименовать вашу ветку на что-то новое.

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

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

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

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

Ответ 26

Проблема с командой push состоит в том, что ваш локальный и удаленный репозиторий не совпадает. Если вы инициализируете readme по умолчанию при создании нового репозитория из git hub, то основная ветка создается автоматически. Тем не менее, когда вы пытаетесь нажать, что не имеет никакой ветки. Вы не можете нажать... Итак, лучшая практика - создавать репо без инициализации readme по умолчанию.

Ответ 27

Если никто не работает с веткой, я предполагаю, что вы сделали следующее:

1. $git commit                    #you committed your changes. 
2. $git push origin <branch>      #you pushed your commit to remote origin (yeah, success!)
3. $git commit --amend            #you did some changes locally and committed with --amend 
4. $git push origin <branch>      #you pushed the "old", just amended commit to the remote origin and you thought "WTF?".

Шаг 4. является причиной вашей проблемы, imho...

Ответ 28

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

Мой сервер находился за ~ 12 часов, когда я сделал push

Я настроил NTP на сервере SYNC мои часы.

Я выполнил новый git push, который привел ошибку, обсуждаемую в этом сообщении.

Ответ 29

Если случайно git pull выводит Already up-to-date, то вы можете проверить глобальный параметр git push.default (In ~/.gitconfig). Установите значение simple, если оно было в matching. Ниже объясняется, почему:

Git - В чем разница между push.default и "matching " и" простой"

Кроме того, стоит проверить, устарела ли ваша локальная ветка, используя git remote show origin и при необходимости тянуть

Ответ 30

используйте git pull https://github.com/username/repository Это потому, что Github и удаленные репозитории не синхронизированы. Если вы pull репо, а затем Push все будет синхронизировано, и ошибка исчезнет.

'