web-dev-qa-db-fra.com

Git: ajouter vs pousser vs engager

Quelle est la différence entre git add, Push et commit?

Juste un peu confus venant de SVN, où "update" ajoutera "des trucs, et commit fera un" Push "et" ajoutera "aussi

Il existe différentes fonctions dans git. En espérant une explication de votre expérience.

102
CQM
  1. git add ajoute vos fichiers modifiés à la file d'attente afin qu'ils soient validés ultérieurement . Les fichiers ne sont pas validés
  2. git commit valide les fichiers ajoutés et crée une nouvelle révision avec un journal ... Si vous n’ajoutez aucun fichier, git ne commettra rien. Vous pouvez combiner les deux actions avec git commit -a

  3. git Push applique vos modifications au référentiel distant.

Ce chiffre de ce git cheat sheet donne une bonne idée du déroulement du travail

enter image description here

git add ne figure pas sur la figure car la méthode suggérée de validation est la combinaison de git commit -a, mais vous pouvez mentalement ajouter un git add au bloc de modification pour comprendre le flux.

Enfin, la raison pour laquelle Push est une commande distincte est due à la philosophie de git. git est un système de gestion de versions distribué et votre répertoire de travail local est votre référentiel! Toutes les modifications que vous avez validées sont immédiatement reflétées et enregistrées. Push sert uniquement à mettre à jour le référentiel distant (que vous pouvez partager avec d'autres) lorsque vous avez terminé avec tout ce sur quoi vous travaillez. C’est un moyen astucieux de travailler et d’enregistrer les modifications localement (sans surcharge du réseau) et de ne les mettre à jour que lorsque vous le souhaitez, et non à chaque validation. Cela se traduit indirectement par des commits/branchements plus faciles, etc. (pourquoi pas, n'est-ce pas? Que cela vous coûte-t-il?), Ce qui conduit à davantage de points de sauvegarde, sans altérer le référentiel.

147
abcd

git add sélectionne les modifications

git commit enregistre les modifications LOCALEMENT

git Push partage les changements

78
Dustin
  • git add ajoute des fichiers à l'index Git, qui est une zone de stockage intermédiaire pour les objets prêts à être validés.
  • git commit valide les fichiers de l’index dans le référentiel, git commit -a est un raccourci pour ajouter d’abord tous les fichiers suivis modifiés à l’index.
  • git Push envoie toutes les modifications en attente au référentiel distant auquel votre branche est mappée (par exemple, sur GitHub).

Afin de comprendre Git, il vous faudrait investir plus d’efforts que jeter un coup d’œil sur la documentation, mais cela en vaut vraiment la peine. N'essayez simplement pas de mapper les commandes Git directement vers Subversion, car la plupart d'entre elles n'ont pas de contrepartie directe.

22
Adam Byrtek

J'étais confus à propos de ce que "vraiment" faisait. Je viens de lire un paragraphe très instructif du livre Git Pro que je voudrais ajouter ici, car il clarifie les choses

"Il s’avère que Git met en place un fichier exactement comme lors de l’exécution de la commande git add. Si vous validez maintenant, la version de benchmarks.rb telle qu'elle était lors de la dernière exécution de la commande git add indique comment elle sera intégrée à la validation, et non la version du fichier tel qu'il se présente dans votre répertoire de travail lors de l'exécution de git commit. Si vous modifiez un fichier après avoir exécuté git add, vous devez exécuter git add à nouveau pour afficher la dernière version du fichier: ”

Extrait de: Chacon, Scott. "Pro ​​Git". Springer, 2009-08-19T00: 00: 00 + 00: 00. iBooks. Ce matériel peut être protégé par le droit d'auteur.

11
user2489252

add indique à git de commencer à suivre un fichier.

commit valide vos modifications actuelles sur votre référentiel local

Push vous repousse local en amont.

7
hvgotcodes

Very Nice pdf à propos de nombreux secrets de GIT.

Add est identique à svn's add (il est parfois utilisé pour marquer le fichier comme résolu).

Commit est également identique à celui de svn, mais il valide les modifications dans votre référentiel local.

5
lord_t

Je trouve cette image très significative:

enter image description here

(de: Oliver Steele - Mon flux de travail Git (2008) )

2
Malick