git error o mal uso de ramificación?

Tengo un gran proyecto que estaba actualizando a Edge Rails. Hice una copy del directory completo del proyecto y la refactoricé allí como medida de precaución para confiar en git (o al less cómo podría usarlo / mal usarlo). Después de completar la mayor parte del trabajo volví al directory original del proyecto y a la console (esto es de memory y, por lo tanto, se basa libremente en lo que realmente sucedió):

git branch edge git checkout edge git rm vendor/plugins git commit -m "wiped out old plugins" 

luego, copié manualmente las últimas versiones de los complementos que había actualizado en mi proyecto copydo.

 git add vendor/plugins git commit -m "re-added in plugins, some unchanged, some later versions" 

Mi entendimiento es que el agregado anterior es recursivo. Para ganar algo de confianza en git, cambié de un lado a otro entre la twig principal y la twig del borde varias veces durante mi trabajo, solo para asegurarme de que estaba manejando el intercambio de forma correcta.

 git checkout master git checkout edge 

Lo que noté es que (después de algunos intercambios) en la twig de borde algunos de los complementos volvieron a las versiones maestras. Numerosas veces intenté comprometer la última versión del complemento problemático, pero finalmente se revirtió después del intercambio.

Sospecho que puede haber un problema con la forma en que agregué los files después de moverlos manualmente. (¿Fue necesario agregar proveedor / plugins / * de git?) ¿Alguien ha tenido algún problema con el intercambio entre sucursales cuando dos twigs contienen algunos de los mismos subdirectorys? ¿Cómo podría manejar la fusión de los cambios encontrados en una copy de la aplicación encontrada en un directory en el original? El repository original está limpio, mientras que la copy está bastante desorderada por haber intentado que ciertos complementos permanezcan modificados en la twig de borde.

Esa parece una forma realmente extraña de hacer lo que pretendías.

La forma más "idiota" de hacer lo que usted propuso hubiera sido:

 $ git checkout -b edge ... #make your modifications for the port. $ git commit -m'ported plugins to rails edge' -a $ git checkout master # original code is there untouched $ git checkout edge # ported code is there just as you commited it. 

A partir de ahí, dependiendo de cuál sea tu objective, puedes:

 $ git checkout master # make sure you are on the master branch $ git merge edge # merge the edge branch into master ... # fix any errors $ git branch -d edge # remove the edge branch since you don't need it anymore. 

O mantener dos twigs. Uno portado al borde, el otro el no portado. Esto probablemente no es lo que quieres. Las sucursales en git son baratas y fáciles, y es perfectamente aceptable tirarlas cuando hayas terminado.

git checkout no eliminará los files que no estén en una confirmación. debe usar git clean -f para eliminar todos los files no deseados en el directory de trabajo actual. también podría simplemente eliminar la carpeta y volver a git checkout -f nuevamente.

Aparte de eso, es mejor crear una twig para trabajar en las características de borde y luego fusionar la twig hacia atrás, como se menciona en el muro de Jeremy.