Что происходит с новой веткой при удалении ссылочного коммита с мастера?
Ничего.
Ваш вопрос, кажется, основан на неправильном понимании того, что такое ветка. Ветвь - это тип ссылки - отличается от других ссылок только тем, что в git есть несколько соглашений о том, куда указывают ветви и как они перемещаются. Ссылка - это указатель на коммит [1].
Когда вы сбрасываете master
, вы просто меняете указатель, который является master
ref, так что он перестает указывать на D
и начинает указывать на B
. Это никак не влияет на указатель, который является new branch
ref.
Коммиты C
и D
все еще существуют и не изменяются при сбросе master
. Просто master
больше не указывает на место, из которого они могут быть «достигнуты» (тогда как раньше можно было достичь D
, потому что это то, на что указывало master
, и C
можно было бы достичь с помощью D
родительский указатель).
Но new branch
все еще указывает на D
, поэтому он все еще может достигать C
и D
.
Так что new branch
не перебазируется или что-то еще. Перебазирование - это переписывание и замена коммитов, потому что вы хотите внести те же изменения, что и они, относительно другой начальной точки. Это не происходит здесь. Это коммиты, которые перебазируются, и часто, когда перебазирование коммитов, реф отправляется в путь; но когда мы говорим «перебазировать ветку», это своего рода сокращение от «перебазировать некоторые коммиты, которые в настоящее время достижимы из ветки, а затем переместить ветку, чтобы указать на новые коммиты». Но здесь нам это не нужно; у нас все еще есть наши оригинальные коммиты.
Другая сторона «ветви - это просто указатель» - коммиты не являются «частью» какой-либо ветви. Они существуют независимо от каких-либо ветвей, которые могут ссылаться на них (хотя git gc
в конечном итоге попытается избавиться от них, если думает, что никто не знает, как их найти). Говорят, что коммит, на который указывает ветка, и коммиты, которые могут быть достигнуты оттуда с помощью родительских указателей, составляют историю ветки ... но это так далеко, как отношения.
Итак, чтобы повторить и подвести итог - сброс master
только перемещает указатель . Он не меняет коммитов и не влияет на другие ветви.
[1] Некоторые рефери могут иногда указывать на что-то иное, чем коммит, но это не слишком важно для этого обсуждения; tl; dr - ветвь является указателем на коммит и ничего более