En git se puede canalizar la salida de git-diff
entre dos interna como esta:
git diff fa1afe1 deadbeef > patch.diff
Enviar el patch.diff
para el desarrollador y dejarlo git-apply
a su espacio de trabajo de la siguiente manera:
git apply patch.diff
Si el otro desarrollador ya tiene los commits disponibles en su repositorio, siempre podría canalizarlo sin fusionarse así:
git apply < git diff fa1afe1 deadbeef
A continuación, puede add y commit los cambios en el diff the usual way.
Ahora aquí viene la parte interesante cuando se tiene que fusionar el parche de nuevo a la rama principal (es público). Considere el siguiente árbol de revisión, donde C*
es el parche aplicado desde C
en la rama principal:
A---B---C---D master, public/master
\
E---C*---F feature_foo
Puede utilizar git-rebase
para actualizar la rama tema (llamado en este ejemplo feature_foo
) con su cabeza contra la corriente. Lo que esto significa es cuando se escribe en la siguiente:
git rebase master feature_foo
Git reorganizar el árbol de revisión como este y también se colocará el parche en sí:
A---B---C---D master, public/master
\
E*---F* feature_foo
La fusión de la rama ascendente ahora será una fácil fusión de avance rápido. También compruebe que los nuevos commits E*
y F*
funcionan como el E
anterior y el F
respectivamente.
Puede hacer lo mismo contra la sucursal de otro desarrollador siguiendo los mismos pasos, pero en lugar de hacerlo en un repositorio público, tendrá fetching revisiones del repositorio del desarrollador. De esta forma, no tendrá que pedirle al otro desarrollador un parche si ya está disponible de acuerdo con lo que publicó en su repositorio.
Tenga en cuenta que no rebase una rama pública porque el comando git reescribir la historia, que es algo que no quiere hacer en ramas que dependen las personas y creará un desastre cuando la fusión a repositorios remotos. Además, nunca olvides el integrate often para que otros miembros de tu equipo puedan participar de tus cambios.
Descubrí después que puede hacer lo mismo con git format-patch para formatear un parche y git am para aplicar y confirmar el parche. Ejemplo: git formato-parche -k --stdout R1 ... R2 | git am -3 -k – Spoike