Supposons qu'un seul fichier entraîne quelques modifications liées à différents problèmes. Nous pouvons facilement simplement poster git commit avec une note pour décrire chaque changement pour chaque problème, le pousser et nous rappeler de ne pas le refaire.
En fonction de la complexité des modifications, j'utilise ce modèle pour attribuer à chaque modification son propre commit:
- Copiez le fichier de travail fini dans un nouveau fichier final.
- Ramène le fichier de travail à son dernier état de validation.
- Diffusez le fichier de travail et le fichier final, puis fusionnez des lignes individuelles pour un problème.
- S'engager avec un commentaire propre pour un seul problème.
- Répéter au besoin.
- Supprimez le fichier final car il ne s'agit plus que d'une copie du fichier de travail en cours.
Y a-t-il une meilleure façon de faire ceci, autre que "ne fais pas ça"? En bref, je sélectionne au sein d'un seul fichier. Mais comme tout développeur le sait, les modifications peuvent s’étendre à plusieurs fichiers et il est parfois difficile d’éviter de telles modifications dès à présent lorsque nous examinons une ligne à modifier, par opposition à son affichage et à son retour ultérieur pour un serveur dédié. changer / engager. Merci.
Réponses:
Oui, c'est essentiellement le but de la "zone de transit" de Git. Les commits ne stockent pas réellement l'arborescence de travail, mais uniquement les modifications que vous avez copiées dans la zone intermédiaire. Vous avez déjà utilisé
git add
pour organiser des fichiers individuels en préparation d'un commit, mais cela permet également des opérations plus détaillées. Voir par exemple Chapitre 7.2 dans le livre Git.Le modèle habituel est d'utiliser
git add -p
pour sélectionner des mecs de diff individuels, avec la possibilité de e Dites-les ensuite (par exemple, au cas où vous auriez des lignes sans rapport dans le même bloc) Il y a aussi un correspondantgit reset -p
à unstage changements individuels au cas où vous en auriez ajouté trop.Utilisation
git diff --cached
pour voir ce qui est mis en scène. Enfin juste courirgit commit
comme d'habitude.(Si vous voulez un raccourci,
git commit -p
fait tout en une étape.)Vous pouvez aussi courir
git gui
ougit citool
pour obtenir une interface de validation graphique, qui permet de sélectionner des lignes individuelles avec une souris (clic droit pour mettre en scène). Il est également intégré à la plupart des autres clients graphiques Git. Cependant, ceux-ci ne fonctionnent généralement qu'au niveau de la ligne entière - si votre fichier contient des modifications non liées dans la même ligne, vous devrez toujours utiliser git add -p et éditez le patch à la main.la source