Git: фатальный: текущий мастер ветвей имеет несколько ветвей вверх по течению, отказываясь толкать

У меня есть эта странная проблема, когда я делаю git push, она отказывается что-то делать:

fatal: The current branch master has multiple upstream branches, refusing to push.

Когда я делаю git push -u origin master, он, кажется, устанавливает его как ветку отслеживания:

Branch master set up to track remote branch master from origin.

Но в следующий раз, когда я попробую git push, он отказывается это делать снова. Я попытался Google, но, похоже, проблема довольно новая, и я не мог найти объяснения этого поведения. Идеи?

Обновление: ./git/config

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = [email protected]:milk.git
[branch "master"]
    remote = origin
    merge = refs/heads/master

Обновление2:. Решено с помощью git config remote.origin.push HEAD в разделе .git/config to [remote "origin"] появилась следующая строка:

    push = HEAD

Update3:

$ git branch -vv
  billing      633c796 [origin/billing: behind 889] links
* master       1a0de50 [origin/master: ahead 1] more fixes
  new_master   3b880d7 [origin/new_master] branches diverged
  photo_stacks 29c8f0d [origin/photo_stacks] 1st try
  responsive   1dad980 [origin/responsive] update

$ git push
fatal: The current branch master has multiple upstream branches, refusing to push.

Ответ 1

Возможно, вы захотите сделать следующее:

git config remote.origin.push HEAD

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

Ответ 2

Запустите git config -l и посмотрите, есть ли у вас несколько строк, содержащих ссылки branch.master * Раздел [ведущий] [ветвь] может быть дублирован ~/.gitconfig и .git/config. Удаление этого параметра в ~/.gitconfig исправило для меня обнаружение разметки вверх по течению.

Ответ 3

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

git push origin master

А также для согласования изменений выполните git pull, которые будут обновлять ваши локальные ссылки с помощью сервера.

Ответ 4

Хорошо, после двухкратного обращения с новыми репозиториями у меня есть ответ.

git remote -v

git удаленный rm (все, кроме источника, если вы добавили какие-либо другие пульты)

git remote rm origin

! предупреждение: более одной ветки .master.remote < - это хорошо

git удаленный добавочный источник git @github.com: yourname/yourrepo

pull + push = FIXED

Ответ 5

Скорее всего это потому, что в вашем git config есть 2 или более branch.master.remote. Один из вашего глобального конфига git, а другой из вашего локального конфига git.

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

Современные репозитории, которые вы клонируете, должны включать конфигурацию локально, но вполне вероятно, что в вашей глобальной конфигурации git также определен branch.master.remote.

Чтобы проверить, установлен ли он в вашей глобальной конфигурации, используйте:

git config --global --list | grep branch.master

Вы можете удалить или закомментировать раздел branch в вашем глобальном конфиге git, и вам будет хорошо.

git config --global --remove-section branch.master

Это полностью удалит [branch "master"].

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

git config --global --rename-section branch.master branch.someothername

При этом вы не должны получать ошибку множественных веток upstream, когда вы делаете git push на master ветке.

git remote show origin также больше не должен вызывать предупреждение.