Jakie są różnice między „git commit” a „git push”?

895

W tutorialu Git, który przechodzę, git commitjest używany do przechowywania wprowadzonych zmian.

Do czego git pushsłuży?

ben
źródło
83
Możesz także zapoznać się z „Git cheatheet”, który bardzo pomógł mi zrozumieć pojęcie: ndpsoftware.com/git-cheatsheet.html
adriendenat
Oto kolejna ściągawka: atlassian.com/git/tutorials/atlassian-git-cheatsheet
Kanion Kolob
2
brak odpowiedzi, ponieważ została już podana. tylko obserwacja. wydaje mi się, że zatwierdzenie powinno być naprawdę nazywane zapisem, a push powinno się nazywać zatwierdzeniem. Klasyczny problem ze scenariuszem nazewnictwa.
dublinx

Odpowiedzi:

1619

Zasadniczo git commitrejestruje zmiany w repozytorium ”, a git pushaktualizuje zdalne referencje wraz z powiązanymi obiektami ”. Tak więc pierwszy jest używany w połączeniu z lokalnym repozytorium, podczas gdy drugi służy do interakcji ze zdalnym repozytorium.

Oto ładne zdjęcie Olivera Steele , które wyjaśnia model git i polecenia:

Polecenia transportu danych Git

Przeczytaj więcej na temat GitReady.comgit push i git pullna ten temat (artykuł, o którym najpierw wspomniałem)

tanascius
źródło
20
Oto oryginalne źródło: osteele.com/archives/2008/05/my-git-workflow z innym obrazem przepływu pracy git
tanascius
9
@ben github to tylko jedno rozwiązanie do hostowania publicznego repozytorium „w chmurze”, z którym git pushmożna pracować. W rzeczywistości miejscem docelowym git pushmoże być dowolne repozytorium git. Może znajdować się na lokalnym lokalnym dysku twardym w innym katalogu ( git remote add clone ~/proj/clone.git; git push clone masterlub git push ~/proj/clone.git masterna przykład) lub w repozytorium git obsługiwanym przez własny host.
Santa
2
więc ... czy musisz najpierw pchać, czy najpierw zatwierdzać?
Kokodoko
5
@ Pie zaczyna się w twoim obszarze roboczym, gdzie modyfikujesz pliki. Następnie dodajesz je do indeksu, przypisujesz do lokalnego repozytorium i - w końcu
wypychasz
2
@ Mr.Hyde nie, to nie jest możliwe. Git jako kontrola wersji rozproszonej wymaga posiadania lokalnej kopii.
tanascius
215

zatwierdzanie : dodawanie zmian do lokalnego repozytorium

push : aby przesłać ostatnie zatwierdzenie (-a) na zdalny serwer

TheHippo
źródło
56

Zasadniczo git commit wprowadza zmiany do lokalnego repozytorium, a git push wysyła zmiany do zdalnej lokalizacji.

markovuksanovic
źródło
9
to mój drugi dzień korzystania z GIT. Gdy patrzę na powyższe odpowiedzi, wciąż nie widzę wyraźnego obrazu, ale twoja odpowiedź po prostu go uwydatnia. dzięki.
Bopha
1
Czy git pushprzesyła aktualne zaktualizowane pliki lub jakiś specjalny plik „diff”?
multigoodverse
27

git pushsłuży do dodawania zatwierdzeń dokonanych w lokalnym repozytorium do zdalnego - wraz z git pull, umożliwia ludziom współpracę.

Michael Borgwardt
źródło
26

Ponieważ git jest rozproszonym systemem kontroli wersji, różnica polega na tym, że zatwierdzenie spowoduje zatwierdzenie zmian w lokalnym repozytorium, podczas gdy wypychanie spowoduje wypchnięcie zmian do zdalnego repozytorium.

Justin Ethier
źródło
19

Zatwierdź : migawka | Changeset | History_record | Wersja | „Zapisz jako” repozytorium. Repozytorium Git = seria (drzewo) zatwierdzeń .

Lokalne repozytorium: repozytorium na twoim komputerze.

Zdalne repozytorium: repozytorium na serwerze ( Github ).

git commit: Dołącz nowe zatwierdzenie (ostatnie zatwierdzenie + zmiany etapowe ) do lokalnego repozytorium. (Wszystkie zatwierdzenia są przechowywane w/.git )

git push, git pull: Zsynchronizuj lokalne repozytorium z powiązanym repozytorium zdalnym . push- zastosuj zmiany z lokalnego na zdalny , pull- zastosuj zmiany ze zdalnego na lokalny .

xged
źródło
11

git commitzapisz zmiany w lokalnym repozytorium.

git push aktualizuje się zdalne repozytorium z lokalnymi zmianami.

Naresh
źródło
20
Twoja odpowiedź jest w zasadzie identyczna z tą odpowiedzią , nie dodaje nic nowego.
7

Trzy rzeczy do zapamiętania:

1) Katalog roboczy ----- folder, w którym znajdują się nasze pliki kodów

2) Lokalne repozytorium ------ To jest w naszym systemie. Kiedy po raz pierwszy wykonujemy polecenie COMMIT, tworzone jest to lokalne repozytorium. w tym samym miejscu, w którym znajduje się nasz katalog roboczy,
tworzony jest plik Checkit (.git).
Następnie, kiedy tylko dokonamy zatwierdzenia, spowoduje to zapisanie zmian, które wprowadzamy w pliku katalogu roboczego do lokalnego repozytorium (.git)

3) Zdalne repozytorium ----- Znajduje się poza naszym systemem, tak jak na serwerach zlokalizowanych w dowolnym miejscu na świecie. jak github. Po wydaniu polecenia PUSH kody z naszego lokalnego repozytorium są zapisywane w tym zdalnym repozytorium

DEVINDER THAKUR
źródło
7

Chcę tylko dodać następujące punkty:

Nie możesz wypychać, dopóki nie zatwierdzisz, ponieważ używamy git pushdo wypychania zatwierdzeń dokonanych w lokalnym oddziale do zdalnego repozytorium.

git pushPolecenie pobiera dwa argumenty:

Nazwa zdalna, na przykład origin Nazwa gałęzi, na przykładmaster

Na przykład:

git push  <REMOTENAME> <BRANCHNAME> 
git push  origin       master
Faisal Shaikh
źródło
4

Bardzo prymitywna analogia: jeśli porównamy git commitz zapisaniem edytowanego pliku, git pushskopiujemy ten plik do innej lokalizacji.

Nie wyciągaj tej analogii z tego kontekstu - zatwierdzanie i wypychanie nie przypomina zapisywania edytowanego pliku i kopiowania go. To powiedziawszy, powinno się to odbywać dla celów porównawczych.

amn
źródło
1

Łatwiej jest zrozumieć użycie poleceń git addi commitjeśli wyobrażasz sobie, że plik dziennika jest przechowywany w repozytorium na Githubie. Typowy plik dziennika projektu może dla mnie wyglądać następująco:

---------------- 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

Zazwyczaj dzień zaczynam od git pullwniosku, a kończę od git pushwniosku. Wszystko w dziennym zapisie odpowiada temu, co dzieje się między nimi. Każdego dnia wykonuję jedno lub więcej logicznych zadań , które wymagają zmiany kilku plików. Pliki edytowane podczas tego zadania są wymienione w indeksie.

Każde z tych zadań podrzędnych (tutaj zadanie A i zadanie B) są indywidualnymi zatwierdzeniami. git addPolecenie dodaje pliki do listy „Lista plików Changed”. Proces ten nazywany jest także inscenizacją, aw rzeczywistości zapisuje zmienione pliki i dokonane zmiany. Te git commitzapisy komenda / finalizuje zmian i odpowiednią listę indeksu wraz z wiadomością, która może być wykorzystana do późniejszego wykorzystania.

Pamiętaj, że wciąż zmieniasz tylko lokalną kopię swojego repozytorium, a nie tę w Github. Następnie dopiero po wykonaniu git pushtych wszystkich zarejestrowanych zmian wraz z plikami indeksu dla każdego zatwierdzenia zostaniesz zalogowany w głównym repozytorium (na Github).

Na przykład, aby uzyskać drugi wpis w tym wyimaginowanym pliku dziennika, zrobiłbym:

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

W skrócie, git addi git commitpozwala rozbić zmianę w głównym repozytorium na systematyczne logiczne podmienienia. Jak zauważyły ​​inne odpowiedzi i komentarze, istnieje wiele innych zastosowań. Jest to jednak jedno z najczęstszych zastosowań i zasada działania Git, polegająca na wielostopniowym systemie kontroli wersji, w przeciwieństwie do innych popularnych, takich jak Svn.

Cibin Joseph
źródło
0

git commit to tylko oficjalne zapisanie naszych zmian, dla każdego zatwierdzenia, który przekazujemy komunikatowi zatwierdzenia, po zakończeniu zatwierdzeń możemy go przesłać na odległość, aby zobaczyć naszą zmianę na całym świecie

co oznacza, że ​​możemy wykonać wiele zatwierdzeń, zanim przejdziemy na zdalne (widzimy listę zatwierdzeń się wydarzyła, a także komunikaty) git zapisuje każde zatwierdzenie z identyfikatorem zatwierdzenia, który jest 40-cyfrowym kodem

i używam git push tylko wtedy, gdy chciałem zobaczyć moją zmianę zdalnie (tam po sprawdzeniu, czy mój kod działał w jenkins)

Sai Koti
źródło
-1

Zasadniczo git commit wprowadza zmiany do lokalnego repozytorium, a git push wysyła zmiany do zdalnej lokalizacji. Ponieważ git jest rozproszonym systemem kontroli wersji, różnica polega na tym, że zatwierdzenie spowoduje zatwierdzenie zmian w lokalnym repozytorium, podczas gdy wypychanie spowoduje wypchnięcie zmian do zdalnego repozytorium

źródło Google

http://gitref.org/basic/ ten link również będzie bardzo przydatny

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

oroyo segun
źródło
Ta odpowiedź kopiuje słowo w słowo inne odpowiedzi w jedno.
Jeffery Opoku-Mensah
Nie wnosi nic nowego do wszystkiego, co zostało powiedziane wcześniej ...
hublo
-1

w laika, git commitjest krok przed git pushuruchomieniem ich w tej kolejności, aby pomyślnie przenieść plik do github.

Zapał Murapa
źródło
-2

git commitpolega na zatwierdzeniu plików, które są przemieszczane w lokalnym repozytorium. git pushjest szybkie przewijanie do przodu gałęzi głównej strony lokalnej ze zdalną gałęzią główną. Ale scalenie nie zawsze się powiedzie. Jeśli pojawi się odrzucenie, musisz to pullzrobić, abyś mógł odnieść sukces git push.

Marcus Thornton
źródło
Niektóre osoby mogą chcieć wymuszać nacisk zamiast ciągnąć. To zależy od sytuacji. W rzeczywistości, jeśli jesteś oparty na zatwierdzeniach w oddziale, którego nie udostępniasz innym osobom (nawet na zdalnym repozytorium), ściąganie z pewnością nie jest tym, co chcesz zrobić.