Mover solo files específicos a una nueva twig

Tengo branch1 con 10 files, mientras creo una nueva twig como branch2, quiero seleccionar solo cuatro files en la nueva twig.

¿Es posible en git, porque al crear una nueva twig?

Puede echar un vistazo a ¿Qué queremos decir exactamente con "twig"? Los nombres de las sucursales son meras indicaciones, que apuntan a un compromiso específico. Cada confirmación contiene una instantánea, de lo que está en el índice en el momento de hacer la instantánea. (Cada confirmación también "apunta hacia atrás" a su (s) compromiso (s) principal (es), y por supuesto tiene un autor, confirmador y post de confirmación).

Hacer una nueva confirmación primero escribe el índice, luego escribe una confirmación refiriéndose al índice guardado (un object de tree ) y también refiriéndose a la confirmación actual , o HEAD . Por último, la nueva confirmación se convierte en la confirmación actual / HEAD , escribiendo su ID en el nombre de la sucursal. El nombre de la twig apunta al compromiso más reciente (el file HEAD contiene solo el nombre de la sucursal, es el nombre de la sucursal que apunta a la confirmación).

Si desea que una nueva confirmación contenga algún set específico de files, debe agregar esos files al índice y eliminar cualquier otro file del índice. Lo que está en el índice se convertirá en el contenido de la instantánea del siguiente compromiso que realice.

Para ver lo que está en el índice ahora mismo, ejecute git ls-files . Para una salida más detallada / detallada, use git ls-files --stage , que muestra qué ranuras de índice (puede haber más de una, durante una fusión en conflicto, pero de lo contrario todo está en la ranura cero) también están ocupadas.

Al igual que en la respuesta de Bertrand Martel , puede copyr files en el índice usando git checkout :

 git checkout <commit-specifier> -- <path> [ <path> ... ] 

copy el file para cada <path> de la confirmación especificada: un nombre de sucursal apunta a la confirmación de sugerencia en esa twig, pero puede usar cualquier cosa de gitrevisions aquí; en el índice, y luego desde el índice en el tree de trabajo.

También puede copyr un file en el índice tomándolo desde el tree de trabajo:

 git add <path> [ <path> ... ] 

Esto copy todo lo que está en el tree de trabajo en la ruta dada en el índice (específicamente en el slot cero, borrando cualquier otro espacio, por lo que esto resuelve un conflicto de fusión).

Para eliminar un file del índice, use git rm , de forma similar a git add . Sin embargo, tenga en count que esto lo elimina tanto del índice como del tree de trabajo; para eliminar solo del índice, use git rm --cached .

Para las operaciones de scripting complejas, puede usar git update-index para realizar cambios directamente en el índice, pero esto requiere una mayor familiaridad con las partes internas de Git (por ejemplo, primero tiene que hash blob objects y saber cuándo usarlos) --add , --add , y así sucesivamente).

Cree su nueva sucursal, elimine todos los files en esa sucursal, recupere algunos files de otra sucursal y confirme los cambios:

 # create a new branch git checkout -b branch_name # remove all files for this branch git rm -rf . # retrieve some files from master branch git checkout master -- file1 file2 file3 file4 # commit changes git commit -m "create new branch"