Come posso generare un git diff di ciò che è cambiato dall'ultima volta che ho estratto?

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

  •  09-06-2019
  •  | 
  •  

Domanda

Mi piacerebbe scrivere, preferibilmente in rake, le seguenti azioni in un unico comando:

  1. Ottieni la versione del mio repository git locale.
  2. Git estrae l'ultimo codice.
  3. Git differisce dalla versione che ho estratto nel passaggio n. 1 a quella che ora si trova nel mio repository locale.

In altre parole, voglio ottenere il codice più recente dal repository centrale e generare immediatamente un diff di ciò che è cambiato dall'ultima volta che ho estratto.

È stato utile?

Soluzione

Potresti farlo abbastanza semplicemente con refspecs.

git pull origin
git diff @{1}..

Ciò ti darà una differenza del ramo corrente come esisteva prima e dopo il pull.Nota che se il pull non aggiorna effettivamente il ramo corrente, il diff ti darà risultati errati.Un'altra opzione è registrare esplicitamente la versione corrente:

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

Personalmente utilizzo un alias che mi mostra semplicemente un registro, in ordine inverso (ad es.dal più vecchio al più recente), senza fusioni, di tutti i commit dal mio ultimo pull.Lo eseguo ogni volta che il mio pull aggiorna il ramo:

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

Altri suggerimenti

Quello di Greg dovrebbe funzionare (non io, l'altro Greg: P).Per quanto riguarda il tuo commento, origin è una variabile di configurazione impostata da Git quando cloni il repository centrale sul tuo computer locale.Essenzialmente, un repository Git ricorda da dove proviene.Puoi, tuttavia, impostare queste variabili manualmente se devi utilizzare git-config.

git config remote.origin.url <url>

dove url è il percorso remoto al tuo repository centrale.

Ecco un file batch di esempio che dovrebbe funzionare (non l'ho testato).

@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

Questo è molto simile a una domanda che ho posto come ottenere modifiche su un ramo in git.Tieni presente che il comportamento di git diff vs.git log è incoerentemente diverso quando si utilizzano due punti rispetto a git log.tre punti.Ma per la tua applicazione puoi usare:

git fetch
git diff ...origin

Dopodiché, a git pull unirà le modifiche nel tuo HEAD.

Se lo rilasci nel tuo profilo bash sarai in grado di eseguire grin (git remote incoming) e grout (git remote outgoing) per vedere le differenze dei commit in entrata e in uscita per origin master.

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
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top