Подтвердить что ты не робот

Фатальный: ветвь вверх по течению вашей текущей ветки не соответствует имени вашей текущей ветки

После выполнения проверки удаленной ветки 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

Что происходит?

4b9b3361

Ответ 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

явно при каждом нажатии