Git commit partiel des modifications

0

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:

  1. Copiez le fichier de travail fini dans un nouveau fichier final.
  2. Ramène le fichier de travail à son dernier état de validation.
  3. Diffusez le fichier de travail et le fichier final, puis fusionnez des lignes individuelles pour un problème.
  4. S'engager avec un commentaire propre pour un seul problème.
  5. Répéter au besoin.
  6. 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.

TonyG
la source
Travaillez-vous avec des branches? La réalité est que tout ce billet me fait palpiter la tête et que j'utilise Git quotidiennement. Si vous essayez de noter qu'un commit spécifique signifie quelque chose de manière linéaire, cela irait à l'encontre de l'objectif de Git. Découvrez «git flow» et pourquoi les branches sont le meilleur moyen d’utiliser Git. .
JakeGould

Réponses:

0

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 correspondant git 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 courir git commit comme d'habitude.

(Si vous voulez un raccourci, git commit -p fait tout en une étape.)

Vous pouvez aussi courir git gui ou git 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.

grawity
la source
Parfois, je décode certaines modifications pour un commit, puis je reviens à la scène, en obtenant essentiellement quelques commits consécutifs depuis un espace de travail mis à jour. Mais vous avez fourni exactement le type de commentaires que je cherchais. J'essaierai votre suggestion, ferai un compte-rendu ici et vérifierai si la réponse est satisfaisante. Merci.
TonyG