Git checkout commit, haz las cosas y vuelve al master

Tengo un sistema de compilation que toma un repository git, vuelve a una confirmación específica y luego carga esos files en algún lugar. Luego vuelve a dominar.

No estoy seguro de estar usando los commands correctos de Git, ya que Git me dará este post cada vez que realizo un git checkout SHA :

 You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b new_branch_name 

Lo único que quiero hacer es restablecer mi directory de trabajo a una confirmación específica, upload esos files y volver a HEAD / master. Podría hacer algunos cambios en los files cuando vaya al SHA de confirmación específico (convertir XML a JSON o algo así), pero solo quiero perder todos esos cambios cuando regrese a master. En este momento este es mi código

 git checkout SHA # do a bunch of conversion and uploading git checkout master 

¿Es esa la forma preferida de hacer lo que quiero? ¿Siempre podré hacer extracciones desde el origen sin tener conflictos de files (no quiero mantener lo que estoy haciendo entre las cajas)?

Lo estoy preguntando porque veo que "tu maestro y tu origen / maestro divergieron" algunas veces, aunque no estoy seguro de que haya sido causado por esto.

Gracias por adelantado.

Está perfectamente bien hacer esto. Cuando HEAD no corresponde a un nombre de twig, se mostrará como HEAD separado. Nada de malo con eso.

También puede usar git show SHA1:relative/path para tomar una instantánea del file en un punto específico.

Mencionaste tirar de los cambios desde el origen. En su caso, también puede usar git reset --hard SHA1 para volver a una confirmación específica y luego git pull los cambios faltantes del origin/master .

Por lo que describes, puedes hacer algo como:

file git -o /some/where/archive.tar.gz –prefix = <algo> <commit> <list de files>

Mira el manual de file git para los detalles sangrientos. Puede crear files zip, files tar (comprimidos o no), opcionalmente coloque un prefijo "arriba" de los files empaquetados, todos tomados de la confirmación referenceda.

Esto es lo que uso para publicar API, probar y codificar reportes de cobertura de return a mi página github (twig gh-pages) después de una compilation exitosa de Bamboo. Es un objective Ant que hace el tipo de cosas que describes. (Muchas buenas respuestas aquí, pero publicando en caso de que ayude).

 <target name="--publish.site"> <echo file="${temp.dir}/publish-site.sh"> #!/bin/sh cd ${basedir} cp -fr ${basedir}/schema ${reports.dir} git remote set-url origin git@github.com:jasperblues/my-project.git git fetch origin gh-pages:gh-pages git checkout gh-pages git pull rm -fr ./coverage cp -fr ${reports.dir}/coverage/ ./coverage git add ./coverage rm -fr ./api cp -fr ${reports.dir}/api ./api git add api cp -fr ${reports.dir}/schema ./schema git add schema git commit -a -m "publish reports to gh-pages" git push -u origin gh-pages git checkout master </echo> <chmod perm="+x" file="${temp.dir}/publish-site.sh"/> <exec executable="${temp.dir}/publish-site.sh" failonerror="true" failifexecutionfails="true"> <env key="PATH" value="${tools.paths}"/> </exec> </target>