Si está utilizando esta forma del branch
comando (con punto de inicio), no importa dónde se HEAD
encuentre.
Qué estás haciendo:
git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
Primero, estableces tu HEAD
en la rama dev
,
En segundo lugar, comienzas una nueva rama al confirmar 07aeec98
. No hay bb.txt en esta confirmación (de acuerdo con su repositorio de github).
Si desea iniciar una nueva sucursal en la ubicación que acaba de retirar, puede ejecutar una sucursal sin un punto de inicio:
git branch test
o como otros han respondido, bifurque y pague allí en una sola operación:
git checkout -b test
Creo que puede confundirte el hecho de que 07aeec98
es parte de la rama dev
. Es cierto que este compromiso es un antepasado de dev
, sus cambios son necesarios para alcanzar el último compromiso en dev
. Sin embargo, hay otras confirmaciones que se necesitan para alcanzar las últimas dev
, y no están necesariamente en la historia de 07aeec98
.
8480e8ae
(donde agregó bb.txt) no está, por ejemplo, en el historial de 07aeec98
. Si se bifurca desde 07aeec98
, no obtendrá los cambios introducidos por 8480e8ae
.
En otras palabras: si fusiona la rama A y la rama B en la rama C, luego crea una nueva rama en una confirmación de A, no obtendrá los cambios introducidos en B.
Lo mismo aquí, tenías dos ramas paralelas master y dev, que fusionaste en dev. La ramificación de una confirmación de master (anterior a la fusión) no le proporcionará los cambios de dev.
Si desea integrar permanentemente los nuevos cambios del maestro en sus ramas de funciones, debe fusionarlos master
y continuar. Sin embargo, esto creará confirmaciones de fusión en sus ramas de características.
Si aún no ha publicado sus ramas de características, también se puede reajustar ellos en el maestro actualización: git rebase master featureA
. Esté preparado para resolver posibles conflictos.
Si desea un flujo de trabajo en el que pueda trabajar en ramas de funciones sin compromisos de fusión y aún así integrarse con cambios más nuevos en el maestro, le recomiendo lo siguiente:
- base cada nueva rama de características en una confirmación de maestro
- crear una
dev
rama en un compromiso de maestro
- cuando necesite ver cómo su rama de características se integra con los nuevos cambios en el maestro, combine tanto el maestro como la rama de características en
dev
.
No se comprometa dev
directamente, utilícelo solo para fusionar otras ramas.
Por ejemplo, si está trabajando en la función A y B:
a---b---c---d---e---f---g -master
\ \
\ \-x -featureB
\
\-j---k -featureA
Fusionar ramas en una dev
rama para comprobar si funcionan bien con el nuevo maestro:
a---b---c---d---e---f---g -master
\ \ \
\ \ \--x'---k' -dev
\ \ / /
\ \-x---------- / -featureB
\ /
\-j---k--------------- -featureA
Puede seguir trabajando en sus ramas de funciones y seguir incorporando nuevos cambios de las ramas principal y de funciones con dev
regularidad.
a---b---c---d---e---f---g---h---i----- -master
\ \ \ \
\ \ \--x'---k'---i'---l' -dev
\ \ / / /
\ \-x---------- / / -featureB
\ / /
\-j---k-----------------l------ -featureA
Cuando sea el momento de integrar las nuevas funciones, combine las ramas de funciones ( dev
¡ no !) En master.
merge the feature branches (not dev!) into master
?dev
rama. Debe mantener las características específicas de sus sucursales.dev
contiene solo merge commits. Tiene más sentido fusionar todas las funciones nuevas directamentemaster
, que fusionar las funciones y luego fusionar el resultado enmaster
.dev
con solo característicasA
B
yC
fusionarlo enmaster
es idéntico a fusionar individualmenteA
B
yC
enmaster
. Si no, eso desafía mi comprensión de cómo funciona git y ¡tendría mucha curiosidad por saber por qué!Tiene los argumentos en el orden incorrecto:
y para eso, no importa qué rama esté desprotegida; hará lo que dices. (Si omite el argumento de confirmación, de forma predeterminada se crea una rama en el mismo lugar que la actual).
Si desea ver la nueva rama a medida que la crea:
con el mismo comportamiento si omite el argumento de confirmación.
fuente
Puede hacer esto localmente como todos mencionaron usando
Alternativamente, puede hacer esto en github, siga los pasos:
1- En el repositorio, haga clic en el
Commits
.2- en la confirmación desde la que desea ramificarse, haga clic en
<>
para navegar por el repositorio en este punto del historial.3- Haz clic en
tree: xxxxxx
en la parte superior izquierda. Simplemente escriba un nuevo nombre de rama allí, haga clicCreate branch xxx
como se muestra a continuación.Ahora puede obtener los cambios de esa rama localmente y continuar desde allí.
fuente
Tratar
La confirmación solo debe existir una vez en su árbol, no en dos ramas separadas.
Esto le permite verificar esa confirmación específica y nombrarla como desee.
fuente
gitk
visualizar su registroTu tienes que hacer:
(estabas intercambiando el nombre de la rama y confirmando)
O puedes hacer:
Si en lugar de usar el nombre de la rama, obtendrá una rama de la punta de la rama.
fuente
HEAD
significa. En su lugar, podría decir "la punta de la rama" o "la confirmación a la que apunta la rama".