Dans Git, j'ai une branche expérimentale (EXP-12
). J'ai fait quelques changements ici, mais je ne suis pas encore prêt à m'engager. J'ai besoin de faire des ajustements sur master.
Je vais au maître.
Deux cas sont possibles:
- Si j'ai inclus mes modifications dans l'index pendant
EXP-12
, ils apparaîtront également dans l’index de la branche master. - Si je n’ai pas inclus mes modifications dans l’index pendant
EXP-12
, ces fichiers apparaîtront également comme des modifications non effectuées pour la validation sur la branche principale.
Mon problème est que je veux tout sur maître et EXP-12
être séparé. Je veux faire des changements "expérimentaux" sur EXP-12
> aller au maître> faire des changements sur le maître> tout mettre en scène pour le commit (git add -A
)> commit> revenez à EXP-12 et poursuivez les expériences. Maintenant, si je le fais, ma validation à la branche maître inclura toutes les modifications effectuées sur EXP-12
.
Quelle est la logique derrière cela? Ou est-ce que je manque quelque chose?
Réponses:
0 pour la réponse № 1Une solution classique à ce problème consiste à utiliser git stash
- quand tu es " EXP-12
tu peux faire:
git stash save --keep-index "Some work-in-progress on EXP-12"
... puis changez de branche en maître comme d'habitude, effectuez quelques tâches, changez de version et appliquez le cachet le plus récent:
git checkout master
[... do some stuff ...]
git checkout EXP-12
git stash pop
Cependant, je préfère personnellement créer un commit en-cours, puis plus tard:
- Le changer avec
git commit --amend
- Ramenez la branche au commit précédent, mais laissez tout votre travail en tant que modifications non mises en scène avec:
git reset HEAD^
- ... Ou utiliser
git rebase -i <EARLIER-COMMIT>
pour écraser plusieurs travaux en cours.
L’avantage de créer un commit réel surL'utilisation de la cachette signifie que vous pouvez appliquer une cachette sur n'importe quel commit, pas seulement celui sur lequel vous l'avez enregistré, alors qu'un commit normal avance vers cette branche et est lié aux validations précédentes.