Question Créer un patch git à partir des modifications du répertoire de travail en cours


Dites que j'ai des modifications non validées dans mon répertoire de travail. Comment puis-je créer un patch à partir de ceux sans avoir à créer un commit?


561
2018-03-01 19:14


origine


Réponses:


git diff pour les changements non-statiques. git diff --cached pour les changements par étapes.


262
2018-03-01 19:16



Si vous n'avez pas encore validé les modifications, alors:

git diff > mypatch.patch

Mais il arrive parfois qu'une partie de ce que vous faites soit de nouveaux fichiers qui ne sont pas suivis et ne seront pas dans votre git diff sortie. Donc, une façon de faire un patch est de tout mettre en scène pour un nouveau commit (mais ne faites pas le commit), et ensuite:

git diff --cached > mypatch.patch

Ajoutez l'option 'binaire' si vous voulez ajouter des fichiers binaires au patch (par exemple des fichiers mp3):

git diff --cached --binary > mypatch.patch

Vous pouvez ensuite appliquer le patch:

git apply mypatch.patch

1151
2018-03-15 17:43



git diff et git apply fonctionnera pour les fichiers texte, mais ne fonctionnera pas pour les fichiers binaires.

Vous pouvez facilement créer un correctif binaire complet, mais vous devrez créer un commit temporaire. Une fois que vous avez effectué vos commit (s) temporaire (s), vous pouvez créer le patch avec:

git format-patch <options...>

Après avoir créé le correctif, exécutez cette commande:

git reset --mixed <SHA of commit *before* your working-changes commit(s)>

Cela annulera votre (vos) commit (s) temporaire (s). Le résultat final laisse votre copie de travail (intentionnellement) sale avec les mêmes changements que vous aviez à l'origine.

Du côté réception, vous pouvez utiliser la même astuce pour appliquer les modifications à la copie de travail, sans avoir l'historique de validation. Il suffit d'appliquer le (s) patch (s), et git reset --mixed <SHA of commit *before* the patches>.

Notez que vous devrez peut-être bien synchroniser pour que cette option fonctionne. J'ai vu quelques erreurs lors de l'application des correctifs lorsque la personne qui les a fait n'a pas réduit autant de changements que j'avais. Il y a probablement des façons de le faire fonctionner, mais je n'ai pas regardé loin.


Voici comment créer les mêmes correctifs dans Tortoise Git (pas que je recommande d'utiliser cet outil):

  1. Commettez vos changements de travail
  2. Cliquez avec le bouton droit sur le répertoire racine de la branche et cliquez sur Tortoise Git -> Create Patch Serial
    1. Choisissez la gamme qui a du sens (Since: FETCH_HEAD fonctionnera si vous êtes bien synchronisé)
    2. Créez le (s) patch (s)
  3. Cliquez avec le bouton droit sur le répertoire racine de la branche et cliquez sur Tortise Git -> Show Log
  4. Faites un clic droit sur le commit avant votre (vos) engagement (s) temporaire (s), et cliquez reset "<branch>" to this...
  5. Sélectionnez le Mixed option

Et comment les appliquer:

  1. Cliquez avec le bouton droit sur le répertoire racine de la branche et cliquez sur Tortoise Git -> Apply Patch Serial
  2. Sélectionnez le (s) correctif (s) correct (s) et appliquez-les
  3. Cliquez avec le bouton droit sur le répertoire racine de la branche et cliquez sur Tortise Git -> Show Log
  4. Faites un clic droit sur le commit avant le (s) commit (s) du patch, et cliquez reset "<branch>" to this...
  5. Sélectionnez le Mixed option

63
2018-03-25 22:18



Pour créer un patch avec les fichiers modifiés et les nouveaux (staged), vous pouvez exécuter:

git diff HEAD > file_name.patch

20
2017-10-13 09:17



Si vous voulez faire un binaire, donnez un --binary option lorsque vous exécutez git diff.


8
2017-10-08 05:19