Ответ 1
Если вы используете эту форму команды branch
(с начальной точкой), не имеет значения, где находится ваш HEAD
.
Что вы делаете:
git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
-
Сначала вы установите
HEAD
в веткуdev
, -
Во-вторых, вы начинаете новую ветку на commit
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. Ветвление из фиксации мастера (старше слияния) не даст вам изменений dev.
Если вы хотите постоянно интегрировать новые изменения с мастером в свои ветки функций, вы должны объединить master
в них и продолжить. Тем не менее, это приведет к фиксации слияния в ваших ветвях функций.
Если вы не опубликовали свои ветки функций, вы также можете переустановить их на обновленном хозяине: git rebase master featureA
. Будьте готовы решить возможные конфликты.
Если вам нужен рабочий процесс, где вы можете работать с ветвями функций без коммитов, и все еще интегрироваться с новыми изменениями в master, я рекомендую следующее:
- основывайте каждую ветвь новой функции на фиксации master
- создать ветвь
dev
при фиксации master - когда вам нужно посмотреть, как ваша ветка функций интегрируется с новыми изменениями в master, объедините как master, так и ветвь функции в
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
!) в master.