¿Cómo puedo comenzar una twig limpia sin ascendencia, y luego comprometer files progresivamente?

Tengo un framework PHP versionado con GIT y estoy planeando varios cambios (drásticos) en su núcleo.

Lo que quiero hacer es comenzar a trabajar en el nuevo núcleo en una nueva sucursal, pero dado que este cambio también podría requerir alguna reestructuración en el sistema de files, me gustaría comenzar esta nueva sucursal lo más limpiamente posible.

Quiero que la twig limpia se incluya solo con los files principales. Como estoy terminando mis cambios, quiero agregar el rest de los modules del marco al directory de trabajo uno por uno, pero mantener la capacidad de fusionar si realizo cambios en el maestro.

¿Cómo puedo hacer eso?

Rama sin antepasados

Quieres la bandera –orphan . Por ejemplo:

git checkout master git checkout --orphan foo # Unstage all the files in your working tree. git rm --cached $(git ls-files) 

creará una nueva twig llamada foo sin ancestros, pero conservará el tree de trabajo actual de cualquier twig en la que estuvo cuando llamó al command (en este caso, la twig maestra ). A continuación, puede modificar su tree de trabajo para adaptarlo y, a continuación, realizar una confirmación para comenzar de nuevo la historia de esa twig.

Incremental puesta en escena de files

Para realizar adiciones incrementales a su historial, use git add para organizar solo los files que desee para cada confirmación. La página de manual de git-add (1) dice lo siguiente sobre agregar files selectivamente:

Fileglobs (por ejemplo, * .c) se puede dar para agregar todos los files coincidentes. También se puede dar un nombre de directory principal (por ejemplo, dir para agregar dir / file1 y dir / file2) para agregar todos los files en el directory, recursivamente.

Lo que puedes hacer es simplemente mudarte a una nueva sucursal, git co -b my_new_branch , limpiar tu código y conservar las cosas que necesitas, y finalmente comprometerte. Ese commit, el primero en my_new_branch , sería uno limpio .

Si debe trabajar con una versión anterior de git:

  mkdir some_dir cd some_dir git init echo a>some_file; git add some_file; git commit -m 'initial commit' cd .. git fetch ./some_dir/ master:new_independent_branch rm -rf some_dir