Desarrollo en 4 máquinas, 1 en casa, 2 en el trabajo – windows / linux. A menudo quiero usar mi repository git solo para mover el código, código en flujo. Esto también cubre mi caso de uso para hacer una copy de security del código en un repository remoto respaldado por banda central.
No deseo dejar ningún comentario o insert el logging de compromiso cuando lo estoy usando para este propósito. En otras palabras, los loggings de confirmación solo deben representar deltas que son correcciones de function o error. Como git es una razor suiza, ¿cuáles son algunas de las forms de lograr mi caso de uso?
Si vas a demostrar el caso de uso, enumera los commands y algunos comentarios si hay múltiples enfoques.
Algún comentario de comprimir múltiples commits en uno solo en el historial de logging también sería útil, ya que he dejado un rastro de commit tal como está: D
editar
Si conoce forms complementarias (a las respuestas ya presentadas) de lograr dichos casos de uso, por favor proporcione una respuesta. Lo convertiré en una wiki comunitaria si hay muchas buenas respuestas.
Como dice la otra respuesta, es probable que desee crear una nueva twig para su trabajo en curso actual, ya que está cometiendo con tanta frecuencia. Esta twig es la que empuja y tira entre sus repositorys privados. Puede crear esa twig con:
git checkout -b wip master
Luego, cuando quieras comprometerte, solo hazlo con un:
git commit -m "Work in progress"
… o algo similar.
Si está contento de que quiera agrupar todos los cambios en la twig wip
en una única confirmación, puede hacer:
git checkout master # Rather than create a merge commit or a fast-forward, stage the # effect that the merge would have to the tree: git merge --squash wip # Check that that looks sensible: git diff --cached # Now commit and write a proper commit message describing the changes: git commit
Después de eso, deberías tener un único compromiso nuevo en el master
que agrupa todos los cambios que hiciste en wip
. Si haces lo mismo posteriormente, solo deberías get los cambios adicionales que la fusión introduciría como una única confirmación, por lo que no tienes que preocuparte por volver a utilizar wip
. Por supuesto, puede haber algunos conflictos que resolver.
Creo que ese enfoque (usos sucesivos de git merge --squash wip
) funcionaría, pero, si fueras tú, probablemente no lo haría en la práctica. Eso es porque me gustaría dejar atrás las twigs temáticas para las nuevas características que decidí fusionar en master
y poder ver esas fusiones. En cambio, probablemente tomaría un enfoque un poco más complicado:
wip
, creando muchos pequeños commits. add-menu-bar
. wip
actual, por ejemplo con: git checkout -b wip2
add-menu-bar
sean los primeros en la historia después de la divergencia del maestro: git rebase -i master
. Tenga en count que esto está reescribiendo la nueva twig wip2
y deja la twig original wip
como estaba. add-menu-bar
, digamos que es f414f31
. A continuación, cree la twig de tema en esa confirmación: git branch add-menu-bar f414f31
master
con git checkout master && git merge --no-ff add-menu-bar
. master
a cualquier lugar que necesite. wip2
y vuelva a wip2
base en el nuevo maestro: git checkout wip2 && git rebase master
. Ahora trabajas en la nueva twig wip2
lugar, y esa es la que empujas y tiras entre tus repositorys. La razón para crear una nueva twig de trabajo en progreso es que no tiene que preocuparse por la tarea de forzar la twig wip
original a los otros repositorys, volver a configurar o restablecer la twig allí, etc., etc.
Puede crear una sucursal y pasar esa twig entre sus instancias. Cuando elimine la twig, desaparecerá. puedes usar git rebase -i
para fusionar tus múltiples, fluxxy commits en un menor número de buenos commits. Puedes leer sobre esto en cualquier lugar.
Con git y rebase puede adquirir el hábito de comprometerse "todo el time", generalmente cada vez que algo funciona (o incluso si no funciona y quiere volver al estado "mal conocido"). Luego, cuando tengas algo cerca de hacer, puedes queuepsarlos en una única confirmación, o múltiples (si te tomas el time para asegurarte de que cada confirmación se sostenga por sí misma).
La forma habitual es git rebase -i HEAD~20
(donde 20 es el número de confirmaciones que desea realizar) y cambiar pick
to squash
donde desea combinar commits. Probablemente haya herramientas que harán esto automáticamente.
La function de bonificación de git, git bisect
para descubrir qué compromiso de 10 líneas es el que te rompió. 🙂
squashing
es probablemente lo que quieres
Puede squash commits en merge (incluye pull) o rebase (también interactivo)
git merge --squash git rebase -i