Если я не объединяю / вытягиваю запрос, что происходит с git pu sh?
Ничего «с ним не происходит». Уже сделано. Это в прошлом и не более изменчиво, чем то, что вы ели на завтрак вчера.
То, что делает git push
, - это ваш Git вызов другого Git.
Git имеет коммиты и имена веток, а их Git имеет коммиты и имена веток. Имена вашей ветки Git не обязательно должны совпадать с их именами - использование одного и того же имени, например master
, является просто уступкой человеческому разуму - но если у вас и у них одинаковые коммиты, у вас и у них одинаковые исходные ha sh ID .
Итак, ваш Git имеет "номер телефона" (URL) другого Git сохраненного в вашей адресной книге Git (.git/config
записей) под именем origin
. Используя git push origin
, вы сообщаете своему Git: Наберите другой Git, используя сохраненный URL. Часть local_branch
в git push
затем говорит:
- Найдите фиксацию подсказки моей собственной локальной ветки с именем
local_branch
. - Предложите этому другому Git, совершившему фиксацию, по его ha sh ID.
Если у другого Git еще нет этого коммита, он скажет да, пожалуйста, отправьте его на , и ваш Git предложит больше коммитов. Это продолжается, фиксация за фиксацией, пока ваш Git не достигнет фиксации, которую они делают . Итак, теперь вы предложили все свои новые (ну, новые для них) коммиты.
Когда два Git дойдут до этого момента, согласовав, какие коммиты отправлять ( вместе с любыми другими необходимыми элементами, которые go с ними), ваш Git упаковывает их:
Counting objects ...
Compressing ...
, а затем отправляет их (см. Когда я делаю "git pu sh ", что означает статистика? (Всего, дельта и т. Д. c.) ). Их Git помещает их во временную карантинную зону - обычно это не то, о чем вам нужно заботиться, но в эпоху Covid-19 - красочный факт. ?
Затем, отправив коммиты, ваш Git отправляет приятный вежливый запрос: Если все в порядке, укажите имя вашей ветки ______ (введите имя здесь) на ______ (вставьте сюда ha sh ID). Имя ветки в данном случае local_branch
- потому что это имя вы указали в командной строке. Идентификатор ha sh - это тот же идентификатор ha sh, который хранится ваше имя local_branch
.
Предполагая, что они примут этот запрос, они создадут или обновят имя своей ветки local_branch
, чтобы указать на последнюю фиксацию в вашем local_branch
(и все объекты вышли из карантина и теперь хранятся в своем Git репозитории). Они ответят, что все в порядке. Теперь ваш Git создаст или обновит ваше собственное origin/local_branch
имя, чтобы запомнить идентификатор ha sh, который, по их словам, они безопасно сохранили в своем имени local_branch
.
Поскольку вы использовали git push -u
, ваш Git теперь установит ваше вновь созданное или обновленное имя origin/local_branch
в качестве восходящего вашего собственного имени local_branch
.
Обратите внимание, что если хотите, вы можете сообщить им используйте другое имя:
git push -u origin local_branch:fred_and_wilma
Это говорит вашему Git найти фиксацию наконечника вашей ветки с именем local_branch
, но при запросе их на создайте или обновите их ветку , чтобы вместо этого использовать имя fred_and_wilma
. Обычно вы не должны этого делать, поскольку это приводит к путанице и душевной боли, плюс, конечно же, требует большего ввода в командной строке.
Это имя ветки теперь существует в , что Git, и будет сидеть там до тех пор, пока кто-нибудь - вы или кто-нибудь с разрешениями - не скажете Git, чтобы изменить это каким-либо образом. Если вы или они, в частности удалите его, имя исчезнет. Сами коммиты не go удаляются - по крайней мере, не сразу. Но если это имя было единственным способом найти коммитов, то другой Git в конечном итоге удалит эти коммиты самостоятельно. 1
Если кто-то другой, имеющий доступ к этому другому репозиторию Git, посмотрит на этот Git репозиторий после вашего git push
, кто-то здесь может получить это имя и те коммиты и сохранить эти коммиты в их (третий) Git репозиторий. Итак, как только вы отправили кому-то коммиты, вы должны, как правило, предположить, что теперь они есть у у всех . Даже если вы удалите их из этого второго origin
Git, третьего, четвертого, пятого и т. Д. c., Gits может иметь их сейчас.
(Если никто другой не имеет доступа к origin
Git, ничего из вышеперечисленного не применимо.)
1 При использовании такого сайта, как GitHub, GitLab или BitBucket для размещения вашего origin
Git, вы Может, если вы отправили конфиденциальные файлы по ошибке, обычно попросите администратора на сайте удалить коммиты быстрее, чем это было бы по умолчанию, и тогда они действительно исчезнут - но кто-то тем временем мог их скопировать.