Comment vérifier les modifications sur le référentiel Git distant (d'origine)?


249

Question

Quelles sont les commandes Git pour effectuer le workflow suivant?

Scénario

J'ai cloné à partir d'un référentiel et fait mes propres validations dans mon référentiel local. En attendant, mes collègues se sont engagés sur le référentiel distant. Maintenant, je veux:

  1. Vérifiez s'il y a de nouveaux validations d'autres personnes sur le référentiel distant, c'est origin-à- dire ?

  2. Supposons qu'il y ait eu 3 nouveaux validations sur le référentiel distant depuis mon dernier pull, je voudrais différencier les validations du référentiel distant, c'est- HEAD~3à- dire avec HEAD~2, HEAD~2avec HEAD~1et HEAD~1avec HEAD.

  3. Après avoir su ce qui a changé à distance, je veux obtenir les derniers commits des autres.

Mes découvertes jusqu'à présent

Pour l'étape 2: je connais la notation caret HEAD^, HEAD^^etc. et la notation tilde HEAD~2, HEAD~3etc.

Pour l'étape 3: c'est, je suppose, juste un git pull.



@Daniele qui répond à votre lien est superbe et vient même avec un script bash personnalisable. +1
— gorbysbm

Réponses:


255

Vous pouvez git fetch originmettre à jour la branche distante dans votre référentiel pour pointer vers la dernière version. Pour un diff contre la télécommande:

git diff origin/master

Oui, vous pouvez également utiliser la notation caret.

Si vous souhaitez accepter les modifications à distance:

git merge origin/master

34
Le diff semble inversé. Je trouve plus facile à utiliser, git diff HEAD origin/masterdonc le diff montre ce qui sera appliqué si j'accepte les modifications à distance.
— cbliard

2
"git fetch origin" et "git show-branch * master" m'ont été utiles.
— Léa Massiot

159
git remote update && git status 

Trouvé sur la réponse à Vérifier si la traction est nécessaire dans Git

git remote updatepour mettre à jour vos références de télécommande. Ensuite, vous pouvez effectuer plusieurs opérations, telles que:

  1. git status -unovous dira si la branche que vous suivez est devant, derrière ou a divergé. S'il ne dit rien, le local et le distant sont les mêmes.

  2. git show-branch *master vous montrera les commits dans toutes les branches dont les noms se terminent par master (par exemple master et origin / master).

Si vous utilisez -vavec, git remote updatevous pouvez voir quelles branches ont été mises à jour, vous n'avez donc pas vraiment besoin d'autres commandes.


Pas assez. Je dois faire un git pull <remote> <branch>après dès que je dois pousser, car la pointe de ma succursale locale était derrière l'homologue distant.
— Overdrivr

3
@Overdrivr, la question demande un moyen de vérifier les modifications avant d'obtenir les validations dans la branche locale. donc, oui, vous devez mettre à jour votre branche locale après avoir vérifié les modifications.
— Rajani Karuturi

Est-ce pour être éloigné d'origine ou en amont?
— vikramvi

1
Cette option -v ne fonctionne pas. Car git remote update -vj'ai euerror: unknown switch `v'
— Shad

1
@Shad vous ne devriez git remote -v updatepasgit remote update -v
— Rajani Karuturi

34

Un bon moyen d'avoir une vue synthétique de ce qui se passe sur "origine" est:

git remote show origin

11
Mais cette commande ne me montre pas combien de commits il y a eu sur "origine" depuis mon dernier pull, n'est-ce pas? La façon dont je l'ai compris "git remote show origin" est une opération locale et ne passe pas par le réseau pour récupérer des informations.
— Lernkurve

24

J'utilise juste

git remote update
git status

Ce dernier indique ensuite le nombre de commits derrière ma section locale. (si seulement)

puis

git pull origin master

pour mettre à jour mon local :)


13

Ma question habituelle est plutôt "quelque chose de nouveau ou de changé dans le référentiel ", donc ce qui est changé est pratique. Je l'ai trouvé ici .

git whatchanged origin/master -n 1

1
jamais nouvelle cette commande n'existait. Merci. c'est ce que je cherchais
— Saurabh Jain

11

Une solution potentielle

Grâce à la solution d' Alan Haggai Alavi, j'ai trouvé le workflow potentiel suivant:

Étape 1:

git fetch origin

Étape 2:

git checkout -b localTempOfOriginMaster origin/master
git difftool HEAD~3 HEAD~2
git difftool HEAD~2 HEAD~1
git difftool HEAD~1 HEAD~0

Étape 3:

git checkout master
git branch -D localTempOfOriginMaster
git merge origin/master

13
Pourquoi avez-vous besoin de créer une branche temporaire pour les différences entre les révisions de la télécommande? vous pouvez justegit diff origing/master^ origing/master^^
— Pablo Marin-Garcia

@ PabloMarin-Garcia: Merci. Je ne le savais pas à l'époque.
— Lernkurve

2

git statusne montre pas toujours la différence entre master et origin / master même après une extraction. Si vous souhaitez que la combinaison git fetch origin && git statusfonctionne, vous devez spécifier les informations de suivi entre la succursale locale et l'origine:

# git branch --set-upstream-to=origin/<branch> <branch>

Pour la branche maître:

git branch --set-upstream-to=origin/master master

0

car il n'a pas été suggéré jusqu'à présent ... et je le trouve très utile ...

j'utilise simplement

git fetch origin

pour récupérer les modifications à distance, puis je vois les validations à distance locales et en attente (et leurs modifications associées) avec le bel outil gitk ( https://git-scm.com/docs/gitk ) impliquant l'argument --all comme

gitk --all
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.