То, что вы просите, если я вас правильно понимаю, это способ сделать коммиты видимыми во внешнем репозитории , когда они не являются частью ветви .
Коммиты B1 и B2 доступны по их хешу SHA1, но не по любому именованному ref. Таким образом, с точки зрения git, они являются «мусором» и в конечном итоге будут очищены на git gc
(по истечении достаточного периода времени, определенного вашими настройками).
Когда вы делаете git push
, он проталкивает изменения, которые являются «частью» вашего хранилища. Это включает в себя все наборы изменений , доступные из именованного ref . «Мусорные» коммиты не уходят.
Итак, если вы не хотите, чтобы изменения были частью какой-то другой ветви, но вы все равно хотите их подтолкнуть, вы должны сделать их собственной веткой. Это даст вам возможность толкать их, давать вам доступ к ним и предотвращать сбор мусора (который вам не нужен).
Если, с другой стороны, вы готовы сделать свободные коммиты частью master
ветви, вам нужно git rebase
(поместить их поверх текущего master
) или git merge
(чтобы интегрировать их с мастером при сохранении точной истории, которая у вас есть). Вы также можете переписать ветку master
, чтобы включить коммиты в качестве «первого» примера, но я не рекомендую этого (особенно если вы уже нажали master
в другом состоянии).
Чтобы более четко ответить на ваш вопрос «если я переключу свой HEAD
обратно на master
, эти коммиты будут потеряны?», Ответ «в конечном итоге, да, но сразу, нет». Вы можете проверить явные идентификаторы SHA1 коммитов (и найти те, которые используют git reflog
или синтаксис HEAD@{1}
). Но со временем они уйдут, если вы не прикрепите к ним именованный реф.