Domanda

Qui ci sono due domande diverse, ma penso che siano correlate.

  1. Quando utilizzo Git, come posso trovare le modifiche che ho eseguito il commit a livello locale, ma che non ho ancora inviato a un ramo remoto? Sto cercando qualcosa di simile al comando Mercurial hg in uscita .

  2. Quando utilizzo Git, come posso trovare le modifiche apportate a un ramo remoto prima di eseguire un pull? Sto cercando qualcosa di simile al comando Mercurial hg incoming .

Per il secondo: c'è un modo per vedere cosa è disponibile e poi scegliere le modifiche che voglio tirare?

È stato utile?

Soluzione

Git non può inviare quel tipo di informazioni sulla rete, come può fare Hg. Ma puoi eseguire git fetch (che è più simile a hg pull che hg fetch ) per recuperare nuovi commit dai tuoi server remoti.

Quindi, se hai un ramo chiamato master e un telecomando chiamato origin , dopo aver eseguito git fetch , dovresti anche avere un ramo chiamato origin / master . Puoi quindi ottenere il git log di tutti i commit che master deve essere un superset di origin / master facendo git log master ..origin / master . Invertire quei due per ottenere il contrario.

Un mio amico, David Dollar, ha creato un paio di script git shell per simulare hg incoming / outgoing . Puoi trovarli su http://github.com/ddollar/git-utils .

Altri suggerimenti

A partire da Git 1.7.0, esiste una sintassi speciale che consente di fare riferimento generico al ramo upstream: @ {u} o @ {upstream} .

Per imitare hg incoming :

git log ..@{u}

Per imitare hg in uscita :

git log @{u}..

Uso i seguenti alias incoming e outgoing per semplificare l'utilizzo di quanto sopra:

git config --global alias.incoming '!git remote update -p; git log ..@{u}'
git config --global alias.outgoing 'log @{u}..'

Non una risposta completa, ma git fetch attirerà il repository remoto e non eseguirà l'unione. Puoi quindi eseguire un

git diff master origin/master

  1. Usa " git log origin..HEAD "

  2. Usa " git fetch " seguito da " git log HEAD..origin " ;. Puoi selezionare i singoli commit utilizzando gli ID di commit elencati.

Quanto sopra presuppone, ovviamente, che "origine". è il nome del ramo di tracciamento remoto (che è se hai usato clone con opzioni predefinite).

C'è anche questo, per confrontare tutti i rami:

git log --branches --not --remotes=origin

Ecco cosa dice la pagina man di git log a riguardo:

  

Mostra tutti i commit presenti in uno dei   filiali locali ma non in nessuno dei   filiali di tracciamento remoto per l'origine   (ciò che hai quell'origine non è & # 8217; t).

Quanto sopra è per in uscita . Per in arrivo , basta scambiare:

git log --remotes=origin --not --branches

Vorrei

$ git fetch --dry-run

per hg incoming e

$ git push --dry-run

per hg in uscita .

git-out è uno script che emula hg outgoing in modo abbastanza accurato. Analizza " push -n " output, quindi produce output accurati se è necessario specificare argomenti aggiuntivi da inviare.

git incoming

$ git fetch && git log ..origin/master --stat
OR
$ git fetch && git log ..origin/master --patch

git outgoing

$ git fetch && git log origin/master.. --stat
OR
$ git fetch && git log origin/master.. --patch

Quando il " git log " e @ {u} risposte inizialmente mi hanno dato "revisione sconosciuta" errori, ho provato il suggerimento di Chris / romkyns di git push --dry-run .

Otterrai un output come " 5905..4878 master- > master " ;. 5905 è l'ultimo commit che il telecomando ha e commette (e incluso) 4878 verrà applicato al telecomando.

È quindi possibile utilizzare 5905..4878 come argomenti per diversi altri comandi git per ottenere maggiori dettagli:

git diff 5905..4878 # Gives full code changes in diff style

git log --online 5905..4878 # Displays each commit's comment

Quando esegui git fetch, tutti i contenuti inclusi branch, tag (refs) vengono archiviati temporaneamente in .git / FETCH_HEAD il cui contenuto può essere visualizzato con il comando: git log FETCH_HEAD Se non usi il suffisso -a con git fetch, per impostazione predefinita, i contenuti di FETCH_HEAD verranno sovrascritti da nuovi contenuti. Da questi contenuti, è possibile visualizzare e decidere in quale ramo si desidera unirli se lo si fa o si può semplicemente scegliere una ciliegina se si desidera solo qualche commit da ciò che è stato portato da fetch.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top