Если вы используете эту форму команды branch
(с начальной точкой), не имеет значения, где находится ваш HEAD
.
Что вы делаете:
git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
Сначала вы установите HEAD
для ветви dev
,
Во-вторых, вы начинаете новую ветвь при коммите 07aeec98
. На этом коммите нет bb.txt (согласно вашему репозиторию github).
Если вы хотите начать новую ветку в месте, которое вы только что извлекли, вы можете запустить ветку без начальной точки:
git branch test
или, как ответили другие, разветвите и оформите там за одну операцию:
git checkout -b test
Я думаю, что вы можете быть смущены тем фактом, что 07aeec98
является частью ветви dev
. Это правда, что этот коммит является предком dev
, его изменения необходимы для достижения последнего коммита в dev
. Тем не менее, это другие коммиты, необходимые для достижения последней версии dev
, и они не обязательно входят в историю 07aeec98
.
8480e8ae
(где вы добавили bb.txt), например, отсутствует в истории 07aeec98
. Если вы переходите с 07aeec98
, вы не получите изменений, внесенных 8480e8ae
.
Другими словами: если вы объедините ветвь A и ветвь B в ветвь C, а затем создадите новую ветвь при коммите A, вы не получите изменений, внесенных в B.
То же самое здесь, у вас было две параллельные ветви master и dev, которые вы объединили в dev. Выход из коммита master (старше слияния) не даст вам изменений в dev.
Если вы хотите навсегда интегрировать новые изменения из master в ваши ветви функций, вы должны объединить master
в них и продолжить. Тем не менее, это создаст коммиты слияния в ваших ветках объектов.
Если вы не опубликовали свои ветви функций, вы также можете перебазировать их на обновленном мастере: git rebase master featureA
. Будьте готовы решать возможные конфликты.
Если вам нужен рабочий процесс, в котором вы можете работать с функциональными ветками без коммитов слияния и при этом интегрироваться с более новыми изменениями в master, я рекомендую следующее:
- основывать каждую новую функциональную ветвь на коммите master
- создать ветку
dev
на коммите master
- когда вам нужно увидеть, как ваша ветвь функций интегрируется с новыми изменениями в master, объедините как master, так и ветку Feature в
dev
.
Не используйте dev
напрямую, используйте его только для объединения других ветвей.
Например, если вы работаете с функциями A и B:
a---b---c---d---e---f---g -master
\ \
\ \-x -featureB
\
\-j---k -featureA
Объедините ветви в ветку dev
, чтобы проверить, хорошо ли они работают с новым мастером:
a---b---c---d---e---f---g -master
\ \ \
\ \ \--x'---k' -dev
\ \ / /
\ \-x---------- / -featureB
\ /
\-j---k--------------- -featureA
Вы можете продолжить работу над ветвями компонентов и регулярно добавлять новые изменения из основной и функциональных веток в dev
.
a---b---c---d---e---f---g---h---i----- -master
\ \ \ \
\ \ \--x'---k'---i'---l' -dev
\ \ / / /
\ \-x---------- / / -featureB
\ / /
\-j---k-----------------l------ -featureA
Когда пришло время интегрировать новые функции, объедините ветви функций (не dev
!) В мастер.