J'ai apporté quelques modifications à ma branche et j'ai réalisé que j'avais oublié que j'avais caché d'autres modifications nécessaires dans ladite branche. Ce que je veux, c'est un moyen de fusionner mes modifications cachées avec les modifications actuelles.
Y a-t-il un moyen de faire cela?
C'est plus pour plus de commodité, j'ai finalement abandonné et commis d'abord mes modifications actuelles, puis mes modifications cachées, mais j'aurais préféré les intégrer d'un seul coup.
Réponses:
Je viens de découvrir que si vos modifications non validées sont ajoutées à l'index (c'est-à-dire "mises en scène", en utilisant
git add ...
), alorsgit stash apply
(et, vraisemblablement,git stash pop
) feront réellement une fusion appropriée. S'il n'y a pas de conflits, vous êtes en or. Sinon, résolvez-les comme d'habitude avecgit mergetool
ou manuellement avec un éditeur.Pour être clair, voici le processus dont je parle:
... qui est probablement ce que vous recherchez.
tl; dr
Exécutez d'
git add
abord.la source
git stash apply --force
ou quelque chose.git add .
,git stash apply
puisgit reset
d'appliquer la réserve à mes modifications de travail et de fusionner sans avoir à faire de commits.Exécution
git stash pop
ougit stash apply
est essentiellement une fusion. Vous n'auriez pas dû avoir besoin de valider vos modifications actuelles à moins que les fichiers modifiés dans la réserve ne soient également modifiés dans la copie de travail, auquel cas vous auriez vu ce message d'erreur:Dans ce cas, vous ne pouvez pas appliquer la réserve à vos modifications actuelles en une seule étape. Vous pouvez valider les modifications, appliquer le stash, valider à nouveau et écraser ces deux validations en utilisant
git rebase
si vous ne voulez vraiment pas deux validations, mais cela peut être plus problématique que cela en vaut la peine.la source
git commit --amend
.Voici une autre option pour le faire:
git stash show -p
affichera le patch de la dernière réserve sauvegardée.git apply
l'appliquera. Une fois la fusion terminée, la réserve fusionnée peut être supprimée avecgit stash drop
.la source
git stash pop
ne pas faire cela dans les cas où la fusion s'applique proprement ...git stash show -p --no-color | git apply --3way
(--3way
= revenir sur la fusion à 3 voies si le correctif échoue).git stash show -p
crée une différence entre le contenu caché et le commit lors de la création initiale de l'entrée cachée . Cela écraserait donc les modifications du fichier de travail effectuées par l'OP.git stash show -p
sera fusionné pargit apply
, s'il est possible de se passer de conflits.La façon dont je fais cela est donc d'
git add
abord de le fairegit stash apply <stash code>
. C'est le moyen le plus simple.la source
Comme suggéré par @Brandan, voici ce que je devais faire pour me déplacer
Suivez ce processus:
Et vous vous retrouverez avec des modifications locales entièrement fusionnées
file
, prêt à faire plus de travail / nettoyage ou à faire un seul bon commit. Ou, si vous savez que le contenu fusionné defile
sera correct, vous pouvez écrire un message approprié et sautergit reset HEAD^
.la source
Peut-être, ce n'est pas la pire des idées de fusionner (via difftool) depuis ... oui ... une branche!
la source
tu peux facilement
la source
Une autre option est de faire un autre "git stash" des modifications locales non validées, puis de combiner les deux stashes git. Malheureusement, git ne semble pas avoir de moyen de combiner facilement deux cachettes. Donc, une option est de créer deux fichiers .diff et de les appliquer tous les deux - au moins ce n'est pas un commit supplémentaire et n'implique pas un processus en dix étapes: |
comment: https://stackoverflow.com/a/9658688/32453
la source