2012-07-18 12 views
6

Decir que tengo un archivo en un repositorio git:Mantener los cambios locales en un repositorio git

#file.py 

setting1 = default1 
setting2 = default2 

<some code> 

Ahora quiero hacer algunos cambios locales que no se deje reintroducir en el repositorio

#file.py - local change 

setting1 = mysetting1 
setting2 = mysetting2 

<some code> 

Digamos que en algún momento en el futuro se actualizará el repositorio upstream, y quiero reducir sus cambios sin estropear mi configuración local. Es decir, un comando git podría correr que actualizaría el archivo de modo que sería

#file.py - updated copy 

setting1 = mysetting1 
setting2 = mysetting2 

<new code> 

¿Hay alguna manera de hacer esto, ya sea con ramas o alguna otra característica git donde no tengo que poner la configuración local en un archivo separado?

He visto varias otras preguntas como esta, pero se enfocan en excluir un archivo completo.

Gracias

Respuesta

2

Echa un vistazo a git stash. También es un método de "todo el archivo", pero puede encontrar que es lo suficientemente flexible.

De lo contrario, usar git gui y un montón de rebasing (git rebase --interactive) o cherry-picking (git cherry-pick) o solo una rama lateral debería ayudar.

+0

Gracias. En realidad, esconder ** no ** fusiona los archivos, por lo que tiene el mismo efecto en el archivo. Encuentro que tener una sucursal local y una nueva referencia para ser la más confiable, ya que parece que sería fácil perder un alijo y, por lo tanto, todos mis cambios. – korylprince

+0

Oh, nunca quise dar a entender que no se funde. Solo quería decir que no puedes guardar una parte de los cambios (descartando el resto) en el archivo con un solo comando. – fork0

+0

El único problema con todos estos métodos es si git merge siempre tiene un conflicto si se agrega una línea directamente debajo de una editada. Por ejemplo, si tengo el código anterior, y debía agregar "setting3 = default" debajo de setting2 en la rama de origen, la rebase (o cualquier otro método) fallaría con un conflicto, pero si agrego una línea entre los dos, hace la rebase o lo que sea bien. ¿Alguna idea de por qué? – korylprince

3

Lo que está haciendo probablemente esté cambiando las cadenas de conexión y cosas así. Es algo que es local en tu entorno. La forma correcta de manejar esto es a través de scripts borrosos/limpios. Eche un vistazo al "Git Attributes" chapter in the Pro Git book (disponible gratuitamente).

+0

Si esto resulta ser lo que él necesita o no, gracias por vincularlo, bastante inteligente. – R0MANARMY

+0

Gracias por la respuesta. No creo que necesite algo tan poderoso, pero puede ser útil más adelante. – korylprince

Cuestiones relacionadas