В чем разница между этими двумя командами git при изменении силы нажатия?
git push -f origin branch и git push origin +branch
В чем разница между этими двумя командами git при изменении силы нажатия?
git push -f origin branch и git push origin +branch
Если вы только нажимаете одну ветвь, нет никакой разницы.
git push -f origin branch
и
git push origin +branch
являются точными эквивалентами. Разница возникает, когда вы нажимаете более одной ветки с одним git push. Подробнее читайте или перейдите непосредственно к Заключение для ответа.
git-push сообщает вамСамая основная форма git push, которая включает один или несколько refspec (ов), это
git push <repository> <refspec>...
Форма, которую должен удовлетворять аргумент <refspec>..., описана на странице git-push man:
<refspec>...Specify what destination ref to update with what source object. The format of a `<refspec>` parameter is an optional plus `+`, followed by the source object `<src>`, followed by a colon `:`, followed by the destination ref `<dst>`.
Итак, просто чтобы быть ясным, синтаксис для <refspec> равен
[+]<src>[:<dest>]
Если :<dst> опущен, будет обновлен тот же ref, что и <src>... если запись remote.<repository>.push (если есть) в вашей конфигурации Git не укажет иначе.
Далее на странице руководства git-push вы найдете
Имея необязательный ведущий
+, вы можете сказать Git обновить<dst>ref, даже если он не разрешен по умолчанию (например, это не fast-forward.) Это не пытается объединить<src>в<dst>.
И еще дальше:
Обратите внимание, что
--forceприменяется ко всем refs, которые вытолкнуты, следовательно используя его сpush.default, установленным наmatchingили с несколькими нажатиями адресаты, настроенные с помощьюremote.*.push, могут перезаписывать ссылки другим чем текущая ветвь (включая локальные ссылки, которые строго позади их удаленный аналог). Чтобы принудительно нажать только одну ветвь, используйте+перед refspec нажать (например,git push origin +master, чтобы заставить нажатие на ветвьmaster).
В двух словах необязательный + дает вам более тонкий контроль, чем -f делает: если вы нажимаете несколько ссылок за один раз, + позволяет указать который из нажатых ссылок получает принудительное нажатие, тогда как --force (или -f) применяется ко всем refs, которые нажимаются.
Рассмотрим локальное репо с двумя ветвями master и develop, которое вы хотите нажать (с помощью одной команды git push) на удаленный origin.
git push origin master develop будет толкать обе ветки, но ни одна из них не будет принудительно нажата.
git push origin +master develop будет нажимать обе ветки, но только master будет принудительно нажата.
git push origin master +develop, наоборот, будет толкать обе ветки, но только develop будет принудительно нажат.
git push origin +master +develop будет принудительно нажимать обе ветки. Это точный эквивалент git push -f origin master develop.