Quali sono le differenze tra "git commit" e "git push"?


895

In un tutorial Git che sto attraversando, git commitviene utilizzato per memorizzare le modifiche apportate.

A cosa git pushserve allora?


83
Puoi anche dare un'occhiata al "Git cheatsheet" che mi ha aiutato molto a capire il concetto: ndpsoftware.com/git-cheatsheet.html
adriendenat


2
nessuna risposta poiché è già stata fornita. solo un'osservazione. mi sembra che un commit dovrebbe davvero essere chiamato un salvataggio e la push dovrebbe essere chiamata commit. Problema dello scenario di denominazione classico.
dublinx,

Risposte:


1619

Fondamentalmente git commit" registra le modifiche al repository " mentre git push" aggiorna i riferimenti remoti insieme agli oggetti associati ". Quindi il primo viene utilizzato in connessione con il repository locale, mentre il secondo viene utilizzato per interagire con un repository remoto.

Ecco una bella foto di Oliver Steele , che spiega il modello git e i comandi:

Comandi di trasporto dati Git

Maggiori informazioni su git pushe git pullsu GitReady.com (l'articolo a cui ho fatto riferimento prima)


20
Ecco la fonte originale: osteele.com/archives/2008/05/my-git-workflow con un'altra foto di un flusso di lavoro git
tanascius

9
@ben github non è che una soluzione per ospitare il tuo repository pubblico "on-the-cloud" git pushcon cui lavorare. In realtà, la destinazione di git pushpuò essere qualsiasi repository git. Può trovarsi sul proprio disco rigido locale in un'altra directory ( git remote add clone ~/proj/clone.git; git push clone mastero git push ~/proj/clone.git master, ad esempio), o in un repository git che serve il proprio host.
Santa

2
quindi ... devi prima spingere o impegnarti per primo?
Kokodoko,

5
@Piet inizia nel tuo spazio di lavoro, dove modifichi i file. Quindi li aggiungi all'indice, li impegna nel repository locale e - infine - li spinge nel repository remoto
tanascius

2
@ Mr.Hyde no, non è possibile. Git come controllo di versione distribuita richiede di disporre di una copia locale.
Tanascius,

215

commit : aggiunta di modifiche al repository locale

push : per trasferire gli ultimi commit su un server remoto


56

Bene, fondamentalmente git commit inserisce le modifiche nel repository locale, mentre git push invia le modifiche alla posizione remota.


9
questo è il mio secondo giorno di utilizzo di GIT. Mentre guardo le risposte sopra, ancora non riesco a ottenere un'immagine chiara, ma la tua risposta lo inchioda. Grazie.
Bopha

1
Non git pushcarica i file aggiornati effettivi o qualche file speciale "diff"?
multigoodverse

27

git pushviene utilizzato per aggiungere commit a un repository locale su uno remoto - insieme a git pull, consente alle persone di collaborare.


26

Poiché git è un sistema di controllo della versione distribuito, la differenza è che commit commetterà le modifiche al repository locale, mentre push invierà le modifiche a un repository remoto.


19

Commit : Istantanea | Cambiet | History_record | Versione | "Salva come" di un repository. Git repository = serie (albero) di commit .

LocaleRepository : repository sul tuo computer.

Repository remoto : repository su un server ( Github ).

git commit: Aggiunge un nuovo commit (ultimo commit + modifiche gestite ) al repository locale . (Tutti i commit sono memorizzati in/.git )

git push, git pull: Sincronizza il repository locale con il repository remoto associato . push- applica le modifiche da locale a remoto , pull- applica le modifiche da remoto a locale .


11

git commitregistra le tue modifiche nel repository locale .

git push aggiorna il repository remoto con le tue modifiche locali.


20
La tua risposta è sostanzialmente identica a questa risposta , non aggiunge nulla di nuovo.

7

Tre cose da notare:

1) Directory di lavoro ----- cartella in cui sono presenti i nostri file di codici

2) Repository locale ------ Questo è all'interno del nostro sistema. Quando eseguiamo il comando COMMIT per la prima volta, viene creato questo repository locale. nello stesso posto dove si trova la nostra directory di lavoro,
viene creato il file Checkit (.git).
Dopodiché, quando ci impegniamo, questo memorizzerà le modifiche apportate nel file della directory di lavoro al repository locale (.git)

3) Repository remoto ----- Questo è situato al di fuori del nostro sistema come su server situati in qualsiasi parte del mondo. come github. Quando eseguiamo il comando PUSH, i codici dal nostro repository locale vengono archiviati in questo repository remoto


7

Voglio solo aggiungere i seguenti punti:

Non è possibile eseguire il push fino a quando non si git pushesegue il commit in quanto vengono utilizzati per inviare i commit effettuati sulla propria filiale locale in un repository remoto.

Il git pushcomando accetta due argomenti:

Un nome remoto, ad esempio origin Un nome di filiale, ad esempio,master

Per esempio:

git push  <REMOTENAME> <BRANCHNAME> 
git push  origin       master

4

Un'analogia molto grossolana: se ci confrontiamo git commitcon il salvataggio di un file modificato, la git pushcopia di tale file in un'altra posizione.

Per favore, non togliere questa analogia da questo contesto - il commit e il push non sono come salvare un file modificato e copiarlo. Detto questo, dovrebbe valere per amor di confronto.


1

È più facile capire l'uso dei comandi git adde commitse immagini che un file di registro venga mantenuto nel tuo repository su Github. Il tipico file di registro di un progetto per me potrebbe apparire come:

---------------- Day 1 --------------------
Message: Completed Task A
Index of files changed: File1, File2

Message: Completed Task B
Index of files changed: File2, File3
-------------------------------------------

---------------- Day 2 --------------------
Message: Corrected typos
Index of files changed: File3, File1
-------------------------------------------
...
...
...and so on

Di solito inizio la mia giornata con una git pullrichiesta e finisco con una git pushrichiesta. Quindi, ogni cosa nel registro di un giorno corrisponde a ciò che accade tra di loro. Durante ogni giorno ci sono una o più attività logiche che ho completato che richiedono la modifica di alcuni file. I file modificati durante tale attività sono elencati in un indice.

Ognuna di queste attività secondarie (attività A e attività B qui) sono commit individuali. Il git addcomando aggiunge i file all'elenco "Indice dei file modificati". Questo processo è anche chiamato stadiazione e in realtà registra i file modificati e le modifiche eseguite. Il git commitcomando registra / finalizza le modifiche e l'elenco di indici corrispondente insieme a un messaggio personalizzato che può essere utilizzato per riferimento futuro.

Ricorda che stai ancora cambiando solo la copia locale del tuo repository e non quella su Github. Dopodiché, solo quando git pushesegui tutte queste modifiche registrate, insieme ai tuoi file indice per ciascun commit, accedi al repository principale (su Github).

Ad esempio, per ottenere la seconda voce in quel file di registro immaginario, avrei fatto:

git pull
# Make changes to File3 and File4
git add File3 File4
# Verify changes, run tests etc..
git commit -m 'Corrected typos'
git push

In breve, git adde git commitconsente di suddividere una modifica al repository principale in sub-modifiche logiche sistematiche. Come hanno sottolineato altre risposte e commenti, ci sono ovviamente molti più usi per loro. Tuttavia, questo è uno degli usi più comuni e un principio guida dietro Git è un sistema di controllo di revisione multi-stadio a differenza di altri popolari come Svn.


0

git commit non è altro che salvare le nostre modifiche ufficialmente, per ogni commit che inviamo messaggio di commit, una volta che avremo finito con i commit possiamo spingerlo a distanza per vedere i nostri cambiamenti a livello globale

il che significa che possiamo eseguire numerosi commit prima di passare a remoto (possiamo vedere l'elenco dei commit avvenuti e anche i messaggi) git salva ogni commit con ID commit che è un codice di 40 cifre

e uso git push solo quando volevo vedere la mia modifica in remoto (lì dopo controllerò se il mio codice ha funzionato in jenkins)


-1

Bene, fondamentalmente git commit inserisce le modifiche nel repository locale, mentre git push invia le modifiche alla posizione remota. Poiché git è un sistema di controllo della versione distribuito, la differenza è che commit commetterà le modifiche al repository locale, mentre push invierà le modifiche a un repository remoto

fonte Google

http://gitref.org/basic/ anche questo link sarà molto utile

https://git-scm.com/docs/git-commit


Questa risposta copia parola per parola altre risposte in una sola.
Jeffery Opoku-Mensah,

Non porta nulla di nuovo a tutto ciò che è già stato detto prima ...
hublo

-1

in parole povere, git commitè il passaggio prima git pushdi eseguirli in quell'ordine per eseguire correttamente il git del file su github.


-2

git commitconsiste nel commit dei file messi in scena nel repository locale. git pushconsiste nell'avanzare rapidamente unendo il ramo principale del lato locale con il ramo principale remoto. Ma la fusione non avrà sempre successo. Se viene visualizzato il rifiuto, è necessario in pullmodo da poter avere successo git push.


Alcune persone potrebbero voler forzare la spinta invece di tirare. Dipende dalla situazione. In realtà, se siete commit ribasati su un ramo che non stai condividendo con altre persone (anche su un pronti contro termine a distanza), quindi tirare è certamente non quello che si vuole fare.
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.