Comment puis-je générer un git diff de ce qui a changé depuis la dernière fois que j'ai tiré ?

StackOverflow https://stackoverflow.com/questions/61002

  •  09-06-2019
  •  | 
  •  

Question

J'aimerais scripter, de préférence en rake, les actions suivantes en une seule commande :

  1. Obtenez la version de mon référentiel git local.
  2. Git extrait le dernier code.
  3. Git diffère de la version que j'ai extraite à l'étape 1 vers ce qui se trouve maintenant dans mon référentiel local.

En d’autres termes, je souhaite obtenir le dernier code du référentiel central et générer immédiatement un différentiel de ce qui a changé depuis la dernière fois que j’ai extrait.

Était-ce utile?

La solution

Vous pouvez le faire assez simplement avec refspecs.

git pull origin
git diff @{1}..

Cela vous donnera un aperçu de la branche actuelle telle qu'elle existait avant et après l'extraction.Notez que si le pull ne met pas réellement à jour la branche actuelle, le diff vous donnera des résultats erronés.Une autre option consiste à enregistrer explicitement la version actuelle :

current=`git rev-parse HEAD`
git pull origin
git diff $current..

Personnellement, j'utilise un alias qui me montre simplement un journal, dans l'ordre inverse (c'est-à-diredu plus ancien au plus récent), sans fusions, de tous les commits depuis mon dernier pull.Je l'exécute à chaque fois que mon pull met à jour la branche :

git config --global alias.lcrev 'log --reverse --no-merges --stat @{1}..

Autres conseils

celui de Greg cette méthode devrait fonctionner (pas moi, un autre Greg :P).Concernant votre commentaire, origin est une variable de configuration définie par Git lorsque vous clonez le référentiel central sur votre machine locale.Essentiellement, un dépôt Git se souvient d’où il vient.Vous pouvez cependant définir ces variables manuellement si vous en avez besoin en utilisant git-config.

git config remote.origin.url <url>

où url est le chemin distant vers votre référentiel central.

Voici un exemple de fichier batch qui devrait fonctionner (je ne l'ai pas testé).

@ECHO off

:: Retrieve the changes, but don't merge them.
git fetch

:: Look at the new changes
git diff ...origin

:: Ask if you want to merge the new changes into HEAD
set /p PULL=Do you wish to pull the changes? (Y/N)
IF /I %PULL%==Y git pull

Ceci est très similaire à une question que j'ai posée comment obtenir des modifications sur une branche dans git.Notez que le comportement de git diff vs.git log est incohérent différent lors de l'utilisation de deux points vs.trois points.Mais, pour votre application, vous pouvez utiliser :

git fetch
git diff ...origin

Après cela, un git pull fusionnera les modifications dans votre HEAD.

Si vous déposez ceci dans votre profil bash, vous pourrez exécuter grin (git distant entrant) et grout (git distant sortant) pour voir les différences de validations entrantes et sortantes pour le maître d'origine.

function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}
function gd2 { 
 echo branch \($1\) has these commits and \($2\) does not 
 git log $2..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}
function grin {
 git fetch origin master
 gd2 FETCH_HEAD $(parse_git_branch)
}
function grout {
 git fetch origin master
 gd2 $(parse_git_branch) FETCH_HEAD
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top