Come verificare la presenza di modifiche sul repository Git remoto (di origine)?


249

Domanda

Quali sono i comandi Git per eseguire il seguente flusso di lavoro?

Scenario

Ho clonato da un repository e ho eseguito alcuni commit sul mio repository locale. Nel frattempo, i miei colleghi si sono impegnati nel repository remoto. Ora voglio:

  1. Controlla se ci sono nuovi commit da altre persone nel repository remoto, ad es. origin?

  2. Supponiamo che ci siano stati 3 nuovi commit sul repository remoto dal mio ultimo pull, vorrei diffondere i commit del repository remoto, cioè HEAD~3con HEAD~2, HEAD~2con HEAD~1e HEAD~1con HEAD.

  3. Dopo aver saputo cosa è cambiato da remoto, voglio ricevere gli ultimi commit dagli altri.

Le mie scoperte finora

Per il passaggio 2: conosco la notazione caret HEAD^, HEAD^^ecc. E la notazione tilde HEAD~2, HEAD~3ecc.

Per il passaggio 3: Cioè, suppongo, solo a git pull.



@Daniele la risposta a cui stai collegando è superba e arriva anche con uno script bash personalizzabile. +1
gorbysbm,

Risposte:


255

È possibile git fetch originaggiornare il ramo remoto nel repository in modo che punti all'ultima versione. Per un diff contro il telecomando:

git diff origin/master

Sì, puoi usare anche la notazione con il cursore.

Se si desidera accettare le modifiche remote:

git merge origin/master

34
Il diff sembra invertito. Trovo più facile da usare, git diff HEAD origin/masterquindi il diff mostra cosa verrà applicato se accetto le modifiche remote.
cbliard,

2
"git fetch origin" e "git show-branch * master" mi sono stati utili.
Léa Massiot,

159
git remote update && git status 

Trovato questo sulla risposta per verificare se pull necessario in Git

git remote updateper aggiornare i riferimenti remoti. Quindi puoi fare una delle diverse cose, come ad esempio:

  1. git status -unoti dirà se il ramo che stai seguendo è avanti, indietro o divergente. Se non dice nulla, locale e remoto sono uguali.

  2. git show-branch *master ti mostrerà i commit in tutte le filiali i cui nomi finiscono in master (ad esempio master e origin / master).

Se lo usi -vcon git remote updatepuoi vedere quali rami sono stati aggiornati, quindi non hai davvero bisogno di ulteriori comandi.


Non abbastanza. Devo farlo git pull <remote> <branch>dopo che devo spingere, perché la punta della mia filiale locale era dietro la controparte remota.
Overdrivr,

3
@Overdrivr la domanda chiede un modo per verificare le modifiche prima di ottenere gli commit nella filiale locale. quindi, sì, devi aggiornare la tua filiale locale dopo aver verificato le modifiche.
Rajani Karuturi,

È per l'origine remota o upstream?
vikramvi,

1
Quell'opzione -v non funziona. Perché git remote update -vho avutoerror: unknown switch `v'
Shad

1
@Shad si dovrebbe fare git remote -v updatenongit remote update -v
Rajani Karuturi

34

Un buon modo per avere una visione sintetica di ciò che sta succedendo "origine" è:

git remote show origin

11
Ma quel comando non mi mostra quanti commit ci sono stati su "origine" dal mio ultimo pull, vero? Il modo in cui l'ho capito "git remote show origin" è un'operazione locale e non va in rete per recuperare informazioni.
Lernkurve,

24

Io uso solo

git remote update
git status

Quest'ultimo riporta quindi quanti impegni si trovano dietro il mio locale. (se presente)

poi

git pull origin master

per aggiornare il mio locale :)


13

La mia domanda normale è piuttosto "qualsiasi cosa nuova o modificata nel repository", quindi ciò che cambia è utile. L'ho trovato qui .

git whatchanged origin/master -n 1

1
mai nuovo questo comando esisteva. Grazie. questo è quello che stavo cercando
Saurabh Jain

11

Una potenziale soluzione

Grazie alla soluzione di Alan Haggai Alavi, ho ideato il seguente potenziale flusso di lavoro:

Passo 1:

git fetch origin

Passo 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

Passaggio 3:

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

13
Perché è necessario creare un ramo temporaneo per diff tra le revisioni del telecomando? puoi semplicementegit diff origing/master^ origing/master^^
Pablo Marin-Garcia il

@ PabloMarin-Garcia: grazie. Allora non lo sapevo.
Lernkurve,

2

git statusnon mostra sempre la differenza tra master e origin / master anche dopo un recupero. Se si desidera che la combinazione git fetch origin && git statusfunzioni, è necessario specificare le informazioni di tracciamento tra la filiale locale e l'origine:

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

Per il ramo principale:

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

0

dal momento che non è stato suggerito finora ... e lo trovo abbastanza utile ...

lo uso semplicemente

git fetch origin

per recuperare le modifiche remote, e quindi visualizzo sia i commit remoti locali sia quelli in sospeso (e le loro modifiche associate) con il simpatico strumento gitk ( https://git-scm.com/docs/gitk ) che coinvolge l'argomento --all come

gitk --all
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.