Git: add vs push vs commit

115

Jaka jest różnica między git add, pushi commit?

Trochę zdezorientowany pochodzący z SVN, gdzie „aktualizacja” „doda” rzeczy, a zatwierdzenie „wypycha” i „doda” również

W git są różne funkcje. Mając nadzieję na wyjaśnienie z twojego doświadczenia.

CQM
źródło
2
Ładna książka o git
iruediger

Odpowiedzi:

163
  1. git adddodaje zmodyfikowane pliki do kolejki w celu późniejszego zatwierdzenia . Pliki nie są zatwierdzone

  2. git commitzatwierdza dodane pliki i tworzy nową wersję z logiem ... Jeśli nie dodasz żadnych plików, git niczego nie zatwierdzi. Możesz połączyć obie akcje zgit commit -a

  3. git push przesyła zmiany do zdalnego repozytorium.

Ta liczba z tego ściągawki git daje dobre wyobrażenie o przebiegu pracy

wprowadź opis obrazu tutaj

git addNie ma tego na rysunku, ponieważ sugerowany sposób zatwierdzenia jest kombinacją git commit -a, ale możesz dodać mentalnie a git adddo bloku zmian, aby zrozumieć przepływ.

Wreszcie, powodem, dla którego pushjest to oddzielne polecenie, jest gitfilozofia. gitjest rozproszonym systemem wersjonowania, a twój lokalny katalog roboczy jest twoim repozytorium! Wszystkie wprowadzone zmiany są natychmiast odzwierciedlane i rejestrowane. pushsłuży tylko do aktualizowania zdalnego repozytorium (które możesz udostępniać innym), gdy skończysz z tym, nad czym pracujesz. Jest to zgrabny sposób pracy i zapisywania zmian lokalnie (bez obciążenia sieci) i aktualizowania go tylko wtedy, gdy chcesz, a nie przy każdym zatwierdzeniu. Pośrednio prowadzi to do łatwiejszych zatwierdzeń / rozgałęzień itp. (Dlaczego nie, prawda? Ile to kosztuje?), Co prowadzi do większej liczby punktów zapisu, bez ingerowania w repozytorium.

abcd
źródło
Czy więc wypychanie zatwierdzania lokalnie, a następnie wypychanie do zdalnego serwera, czy też trzeba najpierw zatwierdzić, a następnie wypchnąć, aby uzyskać pracę do zdalnego repozytorium?
Andrew S,
2
Najpierw musisz zatwierdzić ("git commit"), które zaktualizują twoje lokalne repozytorium (aka na twoim lokalnym komputerze), a następnie musisz wypchnąć na serwer ("git push"), który zaktualizuje zdalne repozytorium (na serwerze github np. )
Romain,
Bardzo chciałbym mieć funkcję dodawania mentalnego w Git!
Junchen Liu
1
Zaleca się nie tylko częste angażowanie się, ale także częste naciskanie. Chroni to twoją pracę w przypadku awarii dysku twardego.
CCC
86

git add wybiera zmiany

git commit rekordy zmieniają się LOKALNIE

git push akcje zmiany

Dustin
źródło
22
  • git add dodaje pliki do indeksu Gita, który jest obszarem pomostowym dla obiektów przygotowanych do zatwierdzenia.
  • git commitzatwierdza pliki w indeksie do repozytorium, git commit -ajest skrótem do dodawania najpierw wszystkich zmodyfikowanych śledzonych plików do indeksu.
  • git push wysyła wszystkie oczekujące zmiany do zdalnego repozytorium, do którego mapowana jest Twoja gałąź (np. na GitHub).

Aby zrozumieć Git, trzeba by włożyć więcej wysiłku niż tylko przejrzenie dokumentacji, ale zdecydowanie warto. Po prostu nie próbuj mapować poleceń Git bezpośrednio do Subversion, ponieważ większość z nich nie ma bezpośredniego odpowiednika.

Adam Byrtek
źródło
Ktoś powinien wyjaśnić różnicę między lokalnym a zdalnym githubem. Co masz w lokalnym i remte. To jest klucz, który musisz znaleźć
Mehdi Amrollahi,
12

Byłem zdezorientowany, co naprawdę robi „add”. Właśnie przeczytałem bardzo pouczający akapit z książki Git Pro, który chciałbym tutaj dodać, ponieważ wyjaśnia rzeczy

„Okazuje się, że Git przygotowuje plik dokładnie tak, jak jest to po uruchomieniu polecenia git add. Jeśli zatwierdzisz teraz, wersja benchmarks.rb taka, jaka była, kiedy ostatnio uruchomiłeś polecenie git add, to sposób, w jaki trafi do zatwierdzenia, a nie wersja pliku, jak wygląda w katalogu roboczym po uruchomieniu git commit. Jeśli zmodyfikujesz plik po uruchomieniu git add, musisz ponownie uruchomić git add, aby przygotować najnowszą wersję pliku: ”

Fragment od: Chacon, Scott. „Pro Git”. Springer, 2009-08-19T00: 00: 00 + 00: 00. iBooks. Ten materiał może być chroniony prawem autorskim.


źródło
7

add nakazuje gitowi rozpoczęcie śledzenia pliku.

commit zatwierdza bieżące zmiany w lokalnym repozytorium

push wypycha lokalne repozytorium w górę.

hvgotcodes
źródło
5

Bardzo ładny pdf o wielu sekretach GIT.

Add działa tak samo jak svn's add (jakkolwiek czasami jest używane do oznaczania pliku jako rozwiązany).

Commit jest również taki sam jak svn, ale zatwierdza zmianę w lokalnym repozytorium.

lord_t
źródło
2
Teraz muszę poszukać svn dodać i zatwierdzić. Mój wielki strach: ich doktorzy skierują mnie do gita dodawania i zatwierdzania. A lord_t jest autorem wspomnianych dokumentów.
eric
Autor pytania znał SVN, więc założyłem, że zna polecenia svn.
lord_t
0

add -in git służy do informowania git, które pliki chcemy zatwierdzić, umieszcza pliki w obszarze pomostowym

commit- in git służy do zapisywania plików na komputerze lokalnym, więc jeśli wprowadzimy jakiekolwiek zmiany lub nawet usuniemy pliki, nadal możemy odzyskać nasze zatwierdzone pliki

push - jeśli zatwierdzimy nasze pliki na komputerze lokalnym, nadal są one narażone na utratę, jeśli nasz lokalny komputer zostanie zgubiony, uszkodzony itp., Aby zapewnić bezpieczeństwo naszych plików lub udostępnić nasze pliki, zwykle chcemy przechowywać nasze pliki zdalnie repozytorium takie jak Github. Aby zapisać na zdalnych repozytoriach, używamy push

przykład Pomostowanie pliku o nazwie index.html git add index.html

Zatwierdzenie pliku, który jest wystawiony git commit -m 'nazwa twojego zatwierdzenia'

Przesyłanie pliku do Github git push origin master

Herberta
źródło