Ошибка git: не удалось отправить некоторые ссылки на удаленный


450

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

Вот что происходит:

Когда я использую мастер происхождения git push

gitbashscr

Как выглядит мой рабочий каталог и удаленное хранилище:

Снимок экрана: папка с файлами Windows в следующих каталогах: .git, css, js.  И эти файлы: index.php, readme, setsu.php.  Слово «локальный» со стрелкой указывает на css-папку.  Ниже приведен скриншот с заголовком «github», css-папкой и index.php-файлом.


7
похоже, ваше локальное репо не синхронизировано с git репо. ты пытался сделать git pull?
R11G

1
да, но я понятия не имею, что следующий синтаксис после git pull говорит git pull <remote> <branch>, можете ли вы увидеть пример синтаксиса для git pull?
Лейпци

1
Проверьте этот похожий вопрос - stackoverflow.com/questions/18588974/…
R11G

3
@ R11G спасибо, сэр! эта ссылка помогла мне stackoverflow.com/a/18589043/3626672
leipzy

2
Я получил эту ошибку в новом репо. Это помогло: stackoverflow.com/a/6518774/2067690
HumanInDisguise

Ответы:


620

Если в репозитории GitHub были обнаружены новые коммиты, когда вы работали локально, я бы посоветовал использовать:

git pull --rebase
git push

Полный синтаксис:

git pull --rebase origin master
git push origin master

С Git 2.6+ (сентябрь 2015 г.), после выполнения (один раз)

git config --global pull.rebase true
git config --global rebase.autoStash true

Простого git pullбыло бы достаточно.
(Примечание: с Git 2.27 Q2 2020 , a merge.autostashтакже доступен для обычного тяги, без перебазирования)

Таким образом, вы будете воспроизводить ( --rebaseчасть) ваши локальные коммиты поверх недавно обновленного origin/master(или origin/yourBranch:) git pull origin yourBranch.

Смотрите более полный пример в Тяговой главе 6 с перебазироваться в Git Pocket Book .

Я бы порекомендовал:

# add and commit first
git push -u origin master

Это установит отношения отслеживания между вашей локальной веткой master и ее веткой upstream.
После этого любой будущий толчок для этой ветви может быть сделан с помощью простого:

git push

Смотрите « Зачем мне явно выдвигать новую ветку? ».


Так как OP уже сбросил и переделал свой коммит поверх origin/master:

git reset --mixed origin/master
git add .
git commit -m "This is a new commit for what I originally planned to be amended"
git push origin master

Там нет необходимости pull --rebase.

Примечание: git reset --mixed origin/masterтакже может быть написано git reset origin/master, так как эта --mixedопция используется по умолчанию при использовании git reset.


все в порядке, чтобы выполнить ваш предложенный git pull --rebase ...? Потому что я уже сделал> git reset - смешанный origin / master> git add. > git commit -m «Это новый коммит для того, что я изначально планировал внести в поправку»> мастер git push origin предложил здесь stackoverflow.com/questions/18588974/… кстати ваш ответ выглядит полезным сэр
leipzy

3
Для меня мне просто нужно было запустить "git commit". :(
Тайлер

Спасибо, исправил глупую проблему с Git LFS, теперь я отказался от необходимости использовать командную строку в результате, ха-ха.
Тайлер C

2
Действительно супер .. ниже команды работали для меня ... сброса git - смешанный origin / master git add. git commit -m "Это новый коммит для того, что я изначально планировал изменить" git push origin master Спасибо @VonC
Хари Нараянан

1
Спасибо, это работает ! Я часами искал это решение!
Redion Xhepa

97

Кто-нибудь пробовал:

git push -f origin master

Это должно решить проблему.

РЕДАКТИРОВАТЬ: Основываясь на комментарии @Mehdi ниже, мне нужно кое-что прояснить —force pushing. Команда git выше работает безопасно только для первого коммита. Если в предыдущем уже были зафиксированы коммиты, запросы или ветки, это сбрасывает все и устанавливает его с нуля. Если это так, пожалуйста, обратитесь к подробному ответу @VonC для лучшего решения.


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

3
Если вы собираетесь попробовать -f/ --forceэто всегда безопаснее использовать --force-with-leaseвместо этого, что прервет, если есть последующие изменения, которые будут засорены толчком. --force-with-leaseтребуется для многих повседневных ситуаций, но --forceпочти никогда не требуется.
Джошуа Гольдберг

63

Если вы только что использовали git initи добавили свои файлы git add .или что-то подобное и добавили свою удаленную ветку, возможно, вы просто не сделали коммит ( git commit -m 'commit message') ничего локально для отправки на удаленный компьютер ... У меня просто была эта ошибка, и это было вопрос.


1
просто столкнулся с этим. Команда commit не работала во время добавления git. хороший звонок. Спасибо
jgritten

1
Спасибо чувак! Вот и все. Я думал, что я совершил свои изменения. Теперь git push -u origin master работает нормально.
tleo

36

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

Как только я сделал, git commit -m "your msg"а затем все работало нормально.


8
Это не имеет особого смысла. Оригинальный вопрос о том, что местный мерзавец позади . Ни в коем случае не может быть решено, что я должен быть позади, сделать локальный коммит!
GhostCat

О, я также забыл совершить: p
Шамс Нахид

Это также возможно, так как вы не сможете
пушить

3
У меня просто была эта проблема, и я забыл совершить. Сообщение об ошибке должно быть более четким
Иван Топич

1
Это относится ко мне, так как я получаю это точное сообщение об ошибке, и это решение исправило мою проблему.
Диего Фортес

19

Переименуйте свою ветку и затем нажмите, например:

git branch -m new-name
git push -u new-name

Это сработало для меня.


1
это сработало, но, пожалуйста, объясните, почему мы должны это сделать
kanlukasz

Вау, это действительно сработало, но почему? У меня был дефис в моем имени локального филиала: my-branch_wont_push. Когда-то я его переименовал my_branch_wont_push, потом git push -u origin my_branch_wont_pushработал на меня.
cdabel

13

Я нахожу решение этой проблемы в github help.

Вы можете видеть это из: Работа с ошибками не-перемотки вперед

Это говорит:

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

$ git fetch origin
# Fetches updates made to an online repository
$ git merge origin branch
# Merges updates made online with your local work

Или вы можете просто использовать git pull для одновременного выполнения обеих команд:

$ git pull origin branch
# Grabs online updates and merges them with your local work

1
Это нормальный процесс, когда все работает как положено. Ничего не помогает, когда Git думает, что он уже обновлен, как спросил @rubyandcoffee.
Тим

10
  1. git init

  2. git remote add origin https://gitlab.com/crew-chief-systems/bot

  3. git remote -v (для проверки текущего репозитория)

  4. git add -A(добавить все файлы)

  5. git commit -m 'Added my project'

  6. git pull --rebase origin master

  7. git push origin master


перед нажатием на код вам нужно вытащить из репозитория
Джеймс Шива

вы можете просто написать, как git pull --rebase origin master
Джеймс Сива

6

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

  1. git init
  2. git add .
  3. git commit -m 'Add your commit message'
  4. git remote add origin https://User_name@bitbucket.org/User_name/sample.git

    (Над URL https: //User_name@bitbucket.org/User_name/sample.git ссылается на ваш URL-адрес проекта битовой корзины )

  5. git push -u origin master

намек

проверьте, связана ли ваша учетная запись git с вашим локальным git с помощью:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

4

Если вы используете gerrit, это может быть вызвано неправильным идентификатором изменения в коммите. Попробуйте удалить Change-Id и посмотрите, что произойдет.


4

Не забудьте зафиксировать свои изменения, прежде чем отправлять в репозиторий Github. Это может решить вашу проблему.


4

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



3
git push origin {your_local_branch}:{your_remote_branch}

Если ваша локальная ветвь и удаленная ветвь имеют одно и то же имя, вы можете пропустить имя локальной ветки, просто используйте git push {your_remote_branch}. В противном случае он выдаст эту ошибку.


3

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

 rm -rf .git
 git init
 git add .
 git commit -m"first message"
 git remote add origin "LINK"
 git push -u origin master

2

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

git add .
git commit -m "first commit"
git push --set-upstream origin master

2

Для меня проблема была в том, что я не добавлял файлы до коммита.

git add .

git commit -m "your msg"


2

Лучше всего использовать, rm -rf .git/hooksа затем попробовать git push


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

Зачем тебе выбрасывать все свои крючки? может сделать резервную копию сначала?
MSpreij

2

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

git init
git commit -m 'Initial Commit'
git remote add origin https://github.com/kavinraju/Repo-Name.git
git add .
git push -u origin master

ПРОБЛЕМА БЫЛА: я пытался зафиксировать перед установкой файлов, которые у меня есть.

ТАК ЧТО НАМ НУЖНО РАЗДЕЛИТЬ ФАЙЛЫ И ЗАТЕМ.

Это правильная последовательность.

git init
git add .
git commit -m 'Initial Commit'
git remote add origin https://github.com/kavinraju/Repo-Name.git
git push -u origin master

Так как сначала я выполняю неправильную последовательность, я просто выполняю следующие команды

git add .
git commit -m 'Initial Commit'
git push -u origin master

1

Не уверен, что это применимо, но исправление для меня было сделать что-то локально после git init. Затем я нажал на удаленный доступ с помощью --set-upstream ...


1

Создание новой ветки решено за меня:

git checkout -b <nameOfNewBranch>

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


1
У меня была эта проблема точно, я был на feature22 и делал git push origin feature22-fix, но feature22-fixне выходил ни локальный, ни удаленный, поэтому мне пришлось сначала проверить ветку локально, а затем нажать
Honey

1

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

Попробуйте создать файл:

touch initial
git add initial
git commit -m "initial commit"
git push -u origin master

Это поместит файл с именем initial, который вы можете удалить позже.

Надеюсь, этот ответ поможет! Удачи!



1

В моем случае, это был мой huskyпакет, который запрещает толчок.

> husky - pre-push hook failed (add --no-verify to bypass)
> husky - to debug, use 'npm run prepush'
error: failed to push some refs to 'https://username@bitbucket.org/username/my-api.git'

Чтобы толкнуть его силой, просто запустите git push origin master --no-verify

Я побежал, npm run prepushчтобы увидеть отладку ошибки, и это было причиной:

npm ERR! code ELOCKVERIFY
npm ERR! Errors were found in your npm-shrinkwrap.json, run  npm install  to fix them.
npm ERR!     Invalid: lock file's loopback-utils@0.8.3 does not satisfy loopback-utils@^0.9.0

Запустил npm installи передал его, и проблема исправлена.


1

сделай это

git rm --cached *
git add .
git commit -m"upload"
git push --set-upstream origin master

Удачного кодирования!



0

Хорошо, если ни один из приведенных выше ответов не работает, и если вы что-то напутали в ssh-addпоследнее время. Пытаться

ssh-add -D

0

Для пользователей исходного дерева

Сначала сделайте первоначальный коммит или убедитесь, что у вас нет незафиксированных изменений, затем рядом с исходным деревом есть «REMOTES», щелкните его правой кнопкой мыши и затем нажмите «Push to origin». Вот и ты.


0

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


0

В моем случае проблема была в том, что (как ни странно) не было ветки с именем master. Я взял хранилище от Github.


0

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

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