В чем разница между этими двумя командами 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
.