web-dev-qa-db-fra.com

Changement de détail après Git pull

Après un pull Git, sa sortie donne un résumé du montant de la modification.

Comment puis-je voir les modifications détaillées de chacun ou de certains fichiers?

D'accord, voici ma question à Jefromi:

  1. Comment savoir si je tirais vers le master? Tout ce que j'ai fait, c'est "git pull".

  2. Sur quoi master pointe-t-il et quelle est la différence entre master et HEAD, les deux têtes par défaut de Git?

  3. Comment puis-je voir la modification détaillée dans un fichier spécifique?

  4. Comment puis-je voir la modification de la sortie récapitulative par le dernier git pull encore?

  5. Quelle est la différence entre git diff et git whatchanged?

113
Tim

Supposons que vous tentiez de maîtriser. Vous pouvez vous référer à la position précédente de master par master@{1} (ou même master@{10.minutes.ago}; voir la section spécifiant les révisions de la page de manuel git-rev-parse ), afin que vous puissiez faire des choses comme

  • Voir toutes les modifications: git diff master@{1} master

  • Voir les modifications apportées à un fichier donné: git diff master@{1} master <file>

  • Voir toutes les modifications dans un répertoire donné: git diff master@{1} master <dir>

  • Voir à nouveau le résumé des modifications: git diff --stat master@{1} master

Quant à votre question "comment savoir si je suis maître" ... eh bien, l'utilisation des branches est une partie importante du workflow de Git. Vous devez toujours être conscient de la branche sur laquelle vous vous trouvez - si vous avez tiré des modifications, vous voulez les tirer vers la bonne branche! Vous pouvez voir une liste de toutes les branches, avec un astérisque par celui actuellement extrait, avec la commande git branch. Le nom de la branche actuelle est également imprimé avec la sortie de git status. Je recommande fortement de parcourir les pages de manuel des commandes à utiliser - c'est un excellent moyen d'acquérir lentement certaines connaissances.

Et votre dernière question: HEAD est le nom de la branche actuellement extraite. Vous pouvez en effet utiliser HEAD et HEAD@{1} dans ce contexte également, mais c'est un peu plus robuste d'utiliser les branches, car si vous allez vérifier une autre branche. HEAD est maintenant cette deuxième branche, et HEAD@{1} est maintenant master - pas ce que vous voulez!

Pour éviter d'avoir à poser beaucoup de petites questions comme celle-ci, vous devriez probablement consulter un tutoriel Git. Il y en a un million sur le web, par exemple:

175
Cascabel

Disons que vous faites un git pull comme ceci:

$ git pull
remote: Counting objects: 10, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From [email protected]:reponame
   a407564..9f52bed  branchname   -> Origin/branchname
Updating a407564..9f52bed
Fast forward
 .../folder/filename          |  209 ++++++++-----
 .../folder2/filename2        |  120 +++++++++++---------
 2 files changed, 210 insertions(+), 119 deletions(-)

Vous pouvez voir la différence de ce qui a changé en utilisant les numéros de révision:

$ git diff a407564..9f52bed
45
Christian Oudard

1. Comment savoir si je tirais vers le master? Tout ce que j'ai fait, c'est "git pull".

La commande elle-même fonctionne comme ceci:

git pull [options] [<repository> [<refspec>…]]

et par défaut se réfère à la branche actuelle. Vous pouvez vérifier vos succursales en utilisant

git branch -a

Cela listera vos branches locales et distantes comme par exemple (Ajout d'un --- comme séparateur entre local et distant pour le rendre plus clair)

*master
foo
bar
baz
---
Origin/HEAD -> Origin/master
Origin/deploy
Origin/foo
Origin/master
Origin/bar
remote2/foo
remote2/baz

Lorsque vous jetez un coup d'œil à un référentiel distant, vous verrez à quoi vous faites référence:

git remote show Origin

listera comme suit:

* remote Origin
  Fetch URL: ssh://[email protected]:12345/username/somerepo.git
  Push  URL: ssh://[email protected]:12345/username/somerepo.git
  HEAD branch: master
  Remote branches:
    foo    tracked
    master tracked
  Local refs configured for 'git Push':
    foo    pushes to foo    (up to date)
    master pushes to master (fast-forwardable)

Il est donc assez facile de savoir d'où tirer et de pousser.

. comment voir le changement de détail dans un fichier spécifique?

4. comment voir à nouveau le changement dans la sortie récapitulative par le dernier git pull?

La manière la plus simple et la plus élégante (imo) est:

git diff --stat master@{1}..master --dirstat=cumulative,files

Cela vous donnera deux blocs d'informations sur les changements entre votre dernier tirage et l'état actuel du travail. Exemple de sortie (j'ai ajouté un --- comme séparateur entre --stat et --dirstat sortie pour le rendre plus clair):

 mu-plugins/media_att_count.php                     |  0
 mu-plugins/phpinfo.php                             |  0
 mu-plugins/template_debug.php                      |  0
 themes/dev/archive.php                             |  0
 themes/dev/category.php                            | 42 ++++++++++++++++++
 .../page_templates/foo_template.php                |  0
 themes/dev/style.css                               |  0
 themes/dev/tag.php                                 | 44 +++++++++++++++++++
 themes/dev/taxonomy-post_format.php                | 41 +++++++++++++++++
 themes/dev/template_parts/bar_template.php         |  0
 themes/someproject/template_wrappers/loop_foo.php  | 51 ++++++++++++++++++++++
---
 11 files changed, 178 insertions(+)
  71.3% themes/dev/
  28.6% themes/someproject/template_wrappers/
 100.0% themes/
  27.2% mu-plugins/
   9.0% themes/dev/page_templates/
   9.0% themes/dev/template_parts/
  63.6% themes/dev/
   9.0% themes/someproject/template_wrappers/
  72.7% themes/
6
kaiser

C'est un peu hacky de cette façon, mais cela vous permettra d'utiliser des outils graphiques comme gitk ou gitg ou git-gui:

git pull
git reset HEAD@{1}
gitg (or gitk or whatever tool you like)

La réponse avec le plus de votes positifs donne le meilleur moyen d'utiliser l'outil git, mais j'utilise cette méthode car je peux ensuite utiliser des outils avec GUI pour voir les changements: P

J'aurais alors l'étape supplémentaire de faire un git checkout . puis faire git pull encore une fois pour que je tire et fusionne correctement, mais j'apprécie la possibilité d'examiner suffisamment les différences dans une interface graphique pour gérer les deux étapes supplémentaires.

2
Jack