¿Cuál es el equivalente Git de los comandos TFS shelve/unshelve? cherry-pick?
(3)
Descubrí que los comandos shelve / unshelve en TFS son muy útiles y fáciles de usar. ¿Cuál es el equivalente en Git?
aquí está el escenario en TFS:
- Hice cambios en el maletero
- Guardo: el conjunto de cambios se guarda en el servidor (con una etiqueta) y recupero la fuente antes de los cambios
- Yo trabajo en el maletero
- Alguien puede unshelve: obtener el cambio establecido en su espacio de trabajo
Sé que hay un comando llamado cherry-pick pero no estoy seguro del flujo de trabajo y si se ajusta a la necesidad.
Lo que quieres hacer se logra con una vieja y simple ramificación en git.
De una buena respuesta de por JaredPar :
Estanterías es una forma de guardar todos los cambios en su caja sin registrarse. Los cambios se mantienen en el servidor.
Esto es análogo a comprometerse con una sucursal y empujarla a un servidor en git.
Cómo hacerlo:
Supongamos que está trabajando en la rama "maestra" y decide implementar la característica X. Tiene un buen comienzo, pero luego su jefe le dice que la característica Y necesita implementarse tan pronto como sea posible. Phil en el cubo siguiente sobre voluntarios para terminar la característica X mientras que sí tienes Y. Esto es lo que haces:
Cree una nueva sucursal y cambie a ella:
$ git checkout -b feature-x
Confirme sus cambios:
$ git add filethatyouchanged.cc
$ git commit -m ''partial implementation of feature X''
Presiónalo en un servidor que Phil pueda ver:
$ git push origin feature-x
Vuelve a la rama principal (que no ha cambiado):
$ git checkout master
Es posible que también desee crear proactivamente una nueva rama para la característica Y:
$ git checkout -b feature-y
Phil ahora puede desplegar su trabajo de característica X y continuar donde lo dejó:
phil$ git fetch origin
phil$ git checkout -t origin/feature-x
git stash es un poco similar, excepto que está limitado a tu árbol de trabajo.
En un DVCS, para lograr ese tipo de flujo de trabajo, necesita:
- comprometa sus cambios actuales en una nueva rama
- Verifique la sucursal original donde puede continuar, sin ninguno de los cambios que ha introducido (pero se ha comprometido en la nueva sucursal)
- empujar esa nueva rama a un repositorio simple
- permite que otro desarrollador tire de esa nueva rama y la fusione con su rama actual.
Otra forma sería dejar que el otro desarrollador busque su sucursal (donde se ha comprometido ese conjunto especial de cambios), y seleccionarla con precisión , pero eso no se recomienda, porque las confirmaciones seleccionadas son difíciles de seguir .
Lo que describes es similar a git stash
, excepto que con git tienes tu propio repositorio (no solo uno en un servidor), solo tú puedes recuperar ese cambio.
La idea general es:
# do some stuff
vim foo/bar.c
# stash away your changes
git stash
# do some other things...
# retrieve your changes
git stash pop
Si desea que otra persona tenga acceso a este conjunto de cambios, le recomendamos enviarlo a una sucursal activa:
# make yourself a branch
git checkout -b temp-featureA
# commit to it
git add foo/bar.c; git commit
# now you push this branch (or they could just fetch straight from you)
git push origin temp-featureA
# Now, in someone else''s repo:
# Fetch updates
git fetch origin
# Make a branch tracking the remote branch
git branch temp-featureA origin/temp-featureA
# Either check it out:
git checkout temp-featureA
# or cherry-pick it, to apply the changes somewhere else:
git cherry-pick temp-featureA
# or, if it''s multiple commits, rebase it!
git rebase --onto my-branch start-of-featureA temp-featureA