В обратном порядке, потому что 2 проще:
git checkout dev
git merge master
Вот и все. Это не меняет хозяина вообще. Он просто объединяет все изменения, сделанные на master, с вашей веткой dev.
С другой стороны, ошибка не-быстрой пересылки говорит вам, что в ветви, которую вы нажимаете, есть коммиты, которые будут перезаписаны, если ваш толчок будет успешным. Как правило, это происходит, когда два человека работают в одной отрасли. Предположим, что у нас обоих есть коммит А, и мы оба начинаем работать над ним в одной ветке Вы создаете коммит B1, а я создаю B2. Оба имеют А в качестве родителя. Скажем, вы нажимаете первым, так что теперь в удаленной ветви есть A --- B1. Локально у меня А --- В2. Если бы я нажал на свою ветку, то A --- B2 - это то, что было бы на удаленном компьютере, поэтому ваш коммит был бы потерян. Вот где я получу ошибку без ускоренной перемотки вперед. Правильный способ решения этой проблемы - сначала получить изменения, внесенные кем-то другим, а затем подтолкнуть результат. В примере, если бы я вытащил, я бы в итоге:
C
/ \
B1 B2
\ /
A
В частности, git сначала захватывает ваш B1, который является потомком A и родным братом B2, затем он объединяет B1 и B2, чтобы сформировать C. Теперь я могу нажать C обратно на удаленный компьютер, не потеряв ни одной истории, потому что ваш B1 там правильно представлены.