2012-01-27 6 views
6

Quiero crear una rama git que funcione independientemente de la rama principal. Quiero todo el código que está presente en el maestro hasta ahora, pero cualquier cambio adicional en el maestro no debería reflejarse en la rama y cualquier cambio en la rama no debería reflejarse en el maestro.¿Cómo creo una rama git para que los archivos que agrego no se agreguen a la maestra?

que utiliza este comando para crear la rama:

git branch test 

Pero cualquier archivo agrego en master, puedo ver en test. Y cualquier archivo nuevo agregado en test, puedo ver en master. ¿Cómo evitar esto? No utilicé ninguna opción --track al crear la rama.

+2

Eso no se supone que suceda en absoluto. ¿Podría detallar un poco más cómo está haciendo sus commits y cambio de rama? – Mat

+0

Por defecto estoy en la rama principal.Creé una nueva rama usando el comando: git branch test Luego, cambie a la nueva rama usando: git checkout test Agregue un nuevo archivo en la rama de prueba: git add newfile Cambie al maestro: git checkout master luego: estado de git y encuentro el newfile que agregué en la rama de prueba en el maestro ¿Por qué veo el newfile en la rama de prueba en el maestro? Quiero que sea visible solo en la rama de prueba – user811433

+2

¿Confirma sus cambios antes de cambiar? – Mat

Respuesta

4

Lo que ha pedido es exactamente lo que git branch test hace (un punto del que las dos historias ya no se comparten). Hay dos niveles de confusión aquí, sin embargo:

  • Cuando git add newfile, va a añadir al índice, pero no lo comete o actualizar cualquier rama con su contenido. Cuando revisa una nueva sucursal, siempre que no haya conflicto, git no restablecerá esos cambios del índice. Este es un comportamiento deseable, por ejemplo, si está trabajando en otra sucursal y desea llevar solo un subconjunto de los cambios no comprometidos a otra sucursal. Si git commit el estado del índice en su rama original, el índice no conservará esos cambios cuando regrese a la rama de prueba.

  • Cuando se mueve entre árboles que tienen nuevos archivos agregados o eliminados, un git checkout no necesariamente los eliminará del sistema de archivos (si hay una operación de reinicio). Entonces puedes "ver" estos archivos cuando cambias de rama, p. en el resultado de ls o git status - pero están "sin seguimiento" y git no intentará hacer nada con ellos (git commit -a, por ejemplo, no agregará este archivo al índice antes de escribir un nuevo árbol). No es nada de lo que preocuparse, pero si tiene un TOC al respecto, puede eliminarlos (o use git clean).

+2

Más detallado que mi respuesta. +1. Tenga en cuenta que no es TOC. Es CDO, es decir, como TOC, pero en orden alfabético. **Como debería ser**. (Lo siento, es viernes, no pude resistir) – VonC

2
git branch test 
git add . 
git checkout test 
git checkout master 

Mientras no se comprometen, usted podrá ver su árbol de trabajo y su índice (que hace referencia a lo que ha añadido) en ambas ramas test y master.

git checkout test 
git commit -m "files for test" 
git checkout master 

Entonces usted no verá en master los archivos que acaba cometidos en test.
Su nueva sucursal test tendrá la grabación de una nueva confirmación (con contenido nuevo), independiente de master.

14

creo que lo que quería era:

git checkout --orphan somebranch 

esto creará un somebranch sin antecedentes de ningún tipo, puede agregar los archivos que desea que uno, y puede diferir del 100% de su ramas anteriores.

+0

No es lo que * OP * quería, pero lo que hacen la mayoría de las personas al hacer esta pregunta. – jpmc26

Cuestiones relacionadas