Para resolver conflictos yo uso beyond Compare, pero cualquier otro funcionará igual.
El tema del Stash, es como tener un lugar donde dejar el código que has tocado y no has commiteado. Yo lo llamo el 'purgatorio' con varias habitaciones
Ese lugar existe para que puedes dejar código y después lo puedes aplicar en cualquier punto del código, puede ser en la misma rama que desarrollas , en otra rama, o crear una rama a partir de esas modificaciones.
Lo más típico de mi trabajo es cambiar continuamente de tarea, y ¿ que hago con mi código que he escrito ? Yo no lo quiero commitear, pues no esta terminado.
Si usas SourceTree el control del stash es muy sencillo, pero vamos a verlo realmente como lo hacen los hombres
1.- Tenemos nuestro repositorio modificado, y quiero bajarse los cambios de harbour, EasyReport por poner un ejemplo.
2.- Lo primero es hacer un
$git stash save "Mis cambios horrendos..."Esto lo que hace es guarda nuestras diferencias con lo cambios de donde estamos, y le ponemos una pequeños descripción para recordad que es.
3.- Haces un
git pull del repositorio remoto.
4.- Ahora , podemos proceder de varias maneras, aunque lo más seguro será que aplicarás lo último del stash;
$git stash pop Esto aplica tus cambios del stash más reciente a tu código y lo elimina del stash.
4 bis- Ahora, imagina que ese trozo de codigo te va a servir en varias ramas de más, entonces no nos interesa que se elimine;
$git stash apply, lo mismo que el comando anterior, pero sin eliminarlo de la lista.
De esta manera , si hago;
$git checkout rama1 $git stash apply Acabo de aplicar los cambios a esa rama
4 bis 2
Ahora, si tenemos varios stash en la lista, podemos ver con
$git stash list Esto soltará algo como esto;
stash@{0}: On master: primer stash
stash@{1}: On master: segundo stash Si quiero aplicar uno de ellos a mi código, en este caso el primer stash;
$git stash apply stash@{0} 5.- Por último, podemos borrar un elemento de la lista de nuestro 'purgatorio':
$git stash drop stash@{1} Para entender lo grande de esto, manualmente sería, a grandes rasgos, creas una diff del código , lo guardas en un fichero, hacer un reset hard de HEAD, hacer un pull , y aplicar el fichero de diff a la bajada.
La verdad es que puede parecer algo raro, porque esto no existe en ningún otro control de versiones, y la gente se lía la principio, pero piensa que es como si tuvieras una rama en la
cual la tienes para ir dejando y cogiendo trozos de códigos.
Uno de los que me enamoré hace ya 3 años de git , fue esto, y no había clientes gui como ahora
Ahora con sourcetree, tortuise y demás todo esto sonará a chino, pero ahora puede ver como funciona por debajo.