Фатальный: ветвь вверх по течению вашей текущей ветки не соответствует имени вашей текущей ветки
После выполнения проверки удаленной ветки releases/rel_5.4.1
с помощью графического интерфейса Git, я вижу это неожиданное сообщение об ошибке при попытке push
:
fatal: The upstream branch of your current branch does not match
the name of your current branch. To push to the upstream branch
on the remote, use
git push origin HEAD:releases/rel_5.4.1
To push to the branch of the same name on the remote, use
git push origin rel_5.4.1
Я не знаю, о чем говорит Git. Я, вероятно, хочу нажать origin releases/rel_5.4.1
с той ветвью, которую я проверил. Поэтому ни один вариант не кажется мне правильным.
git status
говорит, что я на ветке rel_5.4.1
.
Вот ветка, как она появляется в моем .git/config
:
[branch "rel_5.4.1"]
remote = origin
merge = refs/heads/releases/rel_5.4.1
Что происходит?
Ответы
Ответ 1
Ваша локальная ветвь называется rel_5.4.1
, но удаленная ветвь releases/rel_5.4.1
(насколько это касается Git), /
не имеет специального значения в названиях ветвей, кроме того, чтобы упростить их чтение для человека глаз).
Когда вы нажимаете, Git опасается, хотите ли вы направить свою ветку на releases/rel_5.4.1
(имя удаленной ветки) или хотите создать новую удаленную ветку. Однако он отмечает сходство имен.
Если вы не хотите создавать новую ветку, правильная команда
git push origin HEAD:releases/rel_5.4.1
Вы также можете использовать
git push origin rel_5.4.1:releases/rel_5.4.1
Чтобы исправить предупреждение раз и навсегда, переименуйте локальную ветвь в соответствии с удаленным именем:
git branch -m releases/rel_5.4.1
Ответ 2
Для читателей, которые могут упустить, вероятно, самую важную деталь, хорошо спрятанную в комментариях:
Это связано с настройкой git config push.default
. Он определяет, что git
делает при вводе git push
(см. Ссылку).
В вопросе, по-видимому, было установлено значение simple
(которое является значением по умолчанию для git v2
), вероятно, с помощью
git config --global push.default simple
Это означает, что git
отказывается от нажатия, когда локальная и удаленная ветки не совпадают точно.
Как отмечает @TomSpurling, вышеуказанные настройки безопаснее и рекомендуются для нормального использования, потому что обычно вам нужны одинаковые имена для локальных и удаленных веток.
Однако в определенных ситуациях, когда ваш локальный филиал отслеживает некоторые другая удаленная ветка с другим именем, затем вы хотите изменить это:
Чтобы разрешить переход к ветки отслеживания для каждого git, таким образом, сделайте git pull
и git push
симметричными, используйте
git config push.default upstream
Примечание: Чтобы глобально установить это для всех ваших git
, используйте git config --global push.default upstream
Однако, вероятно, лучше оставить его на git config --global push.default simple
и установить эту опцию только в тех рабочих нагрузках, где это действительно необходимо.
Ответ 3
Эта ошибка может быть исправлена за один раз и все с помощью:
git branch releases/rel_5.4.1 -u origin/releases/rel_5.4.1
Он изменяет вверх по течению от ветки, чтобы соответствовать правильному пульту (снова).
Ответ 4
В моем случае git branch --unset-upstream
решил эту проблему.
Ответ 5
Кажется, что имя локальной ветки, отличное от удаленного, не соответствует тому, что Git
слишком нравится. Вам нужно будет выпустить:
git push origin HEAD:releases/rel_5.4.1
явно при каждом нажатии