Git – No puedo cambiar de twig

Soy un novato git, y recién comencé a usarlo el otro día. La idea parece buena, pero ya me he encontrado con un problema que hace que git parezca mucho más complicado de lo que vale.

Que estoy haciendo:

Empecé añadiéndolo a uno de mis proyectos y creé 3 twigs:

  • Dominar
  • Estable
  • Alfa

Todo parecía estar bien. A partir de hoy, Master y Stable eran prácticamente el mismo código. Estaba trabajando en Alpha, que contenía los comienzos de algunas características nuevas.

Qué salió mal:

Quería terminar la testing de errores en la twig estable, para poder lanzar una actualización a una aplicación de iOS. Cambié accidentalmente a la twig principal (esta es la twig que planeo usar para las versiones publicadas) y luego quise cambiar a la twig estable. Sin embargo, al intentar cambiar recibo el error:

"you need to resolve your current index first" 

Y la twig se niega a cambiar. Aparentemente, tiene algo que ver con una mala fusión … aunque ni siquiera recuerdo haber fusionado nada, excepto por unas pocas líneas de código cuando estaba configurando git. Aquí está el resultado del 'estado de git':

 # On branch master # Unmerged paths: # (use "git reset HEAD <file>..." to unstage) # (use "git add/rm <file>..." as appropriate to mark resolution) # # both modified: Schedule.xcodeproj/project.xcworkspace/xcuserdata/Jordan.xcuserdatad/UserInterfaceState.xcuserstate # 

Estoy usando Xcode 4 y estoy usando el administrador de repositorys integrado para cambiar de sucursales / administrar git, etc.

Entonces, ¿qué salió mal? ¿Por qué git me está dando errores, aunque en realidad nunca me he fusionado mucho (o nada?) En primer lugar, y cómo puedo solucionarlo y evitar que ocurra en el futuro.

Reparado con:

 git reset HEAD <file name of the file stopping merge> 

Dejó de suceder nuevamente al agregar ignores y attributes a algunos de los files del package .xcodeproj:

 .gitignore # xcode noise build/* *.pbxuser *.mode1v3 *.xcuserstate # old skool .svn # osx noise .DS_Store profile .gitattributes *.pbxproj -crlf -diff -merge 

El enfoque simple es ejecutar git stash primero, si no está interesado en Schedule.xcodeproj / project.xcworkspace / xcuserdata / Jordan.xcuserdatad / UserInterfaceState.xcuserstate, que probablemente no sea.

Como Stephen (abajo) señala, no es un enfoque ideal, sin embargo. Otro enfoque (que probablemente no gustará a algunos) es eliminar el file del repository y confirmar ese cambio:

 git rm -f --cached Schedule.xcodeproj/project.xcworkspace/xcuserdata/Jordan.xcuserdatad/UserInterfaceState.xcuser git commit 

El --cached evita que se borre de su disco duro, y se requiere el --cached -f porque ha sido "modificado" (aunque cree que no).

Para evitar problemas similares en el futuro, agregaría este file, al igual que todos los demás files específicos del usuario, al file .gitignore .

Es porque ha modificado los files localmente. En esta etapa, debe enviar estos files o tiene que restablecerlos. Si quiere no quiere comprometerlos, entonces:

$ git reset HEAD file path

Después de restablecer los files, simplemente puede seleccionarlos como:

$ git checkout file path

PRECAUCIÓN: al hacer esto, perderá sus cambios locales.