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.