¿Cómo puedo iniciar una rama limpia sin ancestry y luego confirmar archivos progresivamente?


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

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

Quiero que la rama limpia incluya solo con los archivos principales. A medida que estoy terminando mis cambios, quiero agregar el resto de los módulos del framework al trabajo directorio uno por uno, pero mantener la capacidad de fusionar si hago cambios en maestro.

¿Cómo puedo hacer eso?

 40
Author: Javis, 2012-07-15

3 answers

Rama sin Ancestros

Quieres la bandera orphan 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 rama llamada foosin ancestros, pero preservará el árbol de trabajo actual de cualquier rama en la que estuviera cuando llamó al comando (en este caso, la rama master). A continuación, puede modificar su árbol de trabajo para adaptarse, y luego hacer un commit para iniciar el historial de esa rama de nuevo.

Escalonamiento incremental de archivos

A realice adiciones incrementales a su historial, use git add para organizar solo los archivos que desee para cada confirmación. La página de manual de git-add(1) dice lo siguiente sobre la adición selectiva de archivos:

Fileglobs (e. g.*.c) se puede dar para añadir todos los archivos coincidentes. También se puede dar un nombre de directorio principal (por ejemplo, dir para agregar dir / file1 y dir / file2) para agregar todos los archivos en el directorio, recursivamente.

 82
Author: Todd A. Jacobs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-15 00:14:52

Lo que puede hacer es simplemente moverse a una nueva rama, git co -b my_new_branch, limpiar su código y mantener las cosas que necesita, y finalmente confirmar. Ese commit, el primero en my_new_branch, sería entonces un limpio.

 -4
Author: Samy Dindane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-14 22:44:50

Si debes trabajar con una versión antigua 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
 -4
Author: Hans Ginzel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-02 08:08:35