Si está utilizando esta forma del branchcomando (con punto de inicio), no importa dónde se HEADencuentre.
Qué estás haciendo:
git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
Primero, estableces tu HEADen 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 07aeec98es 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 mastery 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
devrama 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 devdirectamente, 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 devrama 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 devregularidad.
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?devrama. Debe mantener las características específicas de sus sucursales.devcontiene solo merge commits. Tiene más sentido fusionar todas las funciones nuevas directamentemaster, que fusionar las funciones y luego fusionar el resultado enmaster.devcon solo característicasAByCfusionarlo enmasteres idéntico a fusionar individualmenteAByCenmaster. 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: xxxxxxen la parte superior izquierda. Simplemente escriba un nuevo nombre de rama allí, haga clicCreate branch xxxcomo 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
gitkvisualizar 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
HEADsignifica. En su lugar, podría decir "la punta de la rama" o "la confirmación a la que apunta la rama".