Ответ 1
Это:
git checkout myBranch
git push origin myBranch:master
просто пытается выполнить быстрое переключение (то есть принудительное обновление) от myBranch
до master
. Если master
достижимо от myBranch
, т.е. master
не содержит никаких коммитов, которые не имеет и myBranch
, то нажатие будет успешным; в противном случае нажатие будет отклонено.
Предыдущий git checkout myBranch
не имеет отношения к git push
, так как вы используете refspec myBranch:master
. Вы можете узнать больше о refspecs на Git Internals - Refspec.
Это:
git checkout master
git merge myBranch
git push
фактически объединяет myBranch
в master
, а затем пытается направить его на удаленный (с конфигурацией по умолчанию репо Git, пульт будет происходить).
Поскольку myBranch
фактически сливается с master
, то предполагая, что удаленный master
находится за локальным, то есть он не содержит коммитов, которые локальный не имеет, то нажатие будет выполнено, в противном случае это не удастся.