“Git commit” ve “git push” arasındaki farklar nelerdir?


895

Gittiğim bir Git eğitiminde git commityaptığınız değişiklikleri saklamak için kullanılır.

O git pushzaman ne için kullanılır?


83
Ayrıca, konsepti anlamamda bana çok yardımcı olan "Git cheatsheet" e de bakabilirsiniz
adriendenat


2
zaten sağlandığından beri cevap yok. sadece bir gözlem. Bana bir taahhüt gerçekten bir tasarruf ve push taahhüt olarak adlandırılmalıdır. Klasik adlandırma senaryosu sorunu.
dublinx

Yanıtlar:


1619

Temel olarak git commit" depodaki değişiklikleri kaydeder ", git push" uzak başvuruları ilişkili nesnelerle birlikte günceller ". Birincisi yerel deponuzla bağlantılı olarak kullanılırken, ikincisi uzak bir havuzla etkileşimde bulunmak için kullanılır.

İşte git modelini ve komutlarını açıklayan Oliver Steele'den güzel bir resim :

Git veri aktarım komutları

Hakkında daha okuyun git pushve git pullüzerinde GitReady.com (Ben ilk anılacaktır makale)


20
İşte orijinal kaynak: osteele.com/archives/2008/05/my-git-workflow git iş akışının başka bir resmiyle
tanascius

9
@ben github, halka açık "bulutta" depo git pushile çalışmak için kullanılan tek bir çözümdür . Gerçekte, hedef git pusholabilir herhangi git depo. Başka bir dizindeki ( git remote add clone ~/proj/clone.git; git push clone masterveya git push ~/proj/clone.git masterörneğin) kendi yerel sabit sürücünüzde veya kendi ana makinenizin sunduğu bir git deposunda olabilir .
Noel Baba

2
öyleyse ... önce itmek mi yoksa ilk yapmak mı gerekiyor?
Kokodoko

5
@Piet, dosyaları değiştirdiğiniz çalışma alanınızda başlar. Daha sonra bunları dizine ekler, yerel depoya taahhüt eder ve - son olarak onları uzak depoya
itersiniz

2
@ Mr.Hyde hayır bu mümkün değil. Git dağıtılmış bir sürüm kontrolü olarak yerel bir kopyaya sahip olmanızı gerektirir.
tanascius

215

commit : yerel veri havuzuna değişiklik ekleme

push : son işlemleri uzak bir sunucuya aktarmak için


56

Temelde git commit değişikliklerinizi yerel deponuza koyarken git push değişikliklerinizi uzaktaki yere gönderir.


9
bu benim GIT'i kullanmanın ikinci günü. Yukarıdaki cevaplara baktığımda, hala net bir resim elde edemiyorum, ancak cevabınız sadece onu çiviye alıyor. Teşekkürler.
Bopha

1
Mu git pushgerçek güncellenmiş dosyaları veya bazı özel "fark" dosyası yükler?
multigoodverse

27

git pushyerel depoda yaptığınız taahhütleri uzaktaki bir tanesine eklemek için kullanılır - git pullbununla birlikte insanların işbirliği yapmasına olanak tanır.


26

Git dağıtılmış bir sürüm kontrol sistemi olduğundan, fark, kesinliğin yerel deponuzda değişiklik yapması ve push değişikliğinin uzak bir repoya kadar değişiklik yapmasıdır.


19

Tamamlama : Anlık Görüntü | Değişiklik kümesi | Geçmiş_kaydı | Versiyon | Bir deponun 'Farklı kaydet' . Git deposu = taahhüt dizisi (ağaç) .

Yerel depo: bilgisayarınızdaki havuz.

Uzak havuz: sunucudaki havuz ( Github ).

git commit: Yerel depoya yeni bir taahhüt (son taahhüt + aşamalı değişiklikler) ekleyin . (Tüm taahhütler depolanır )/.git

git push, git pull: Yerel havuzu ilişkili uzak havuzla senkronize edin . push- değişiklikleri uygulamak yerel içine uzak , pull- dan değişiklikleri uygulamak uzak içine lokal .


11

git commityerel depodaki değişikliklerinizi kaydedin .

git push güncellemek uzak yerel değişikliklerle depoyu.


20
Cevabınız temel olarak bu cevapla aynı , yeni bir şey eklemiyor.

7

Dikkat edilmesi gereken üç şey:

1) Çalışma Dizini ----- kod dosyamızın bulunduğu klasör

2) Yerel Depo ------ Bu sistemimizin içindedir. COMMIT komutunu ilk kez yaptığımızda bu Yerel Depo oluşturulur. Çalışma dizinimizin bulunduğu yerde,
Checkit (.git) dosyası oluşturulur.
Bundan sonra, taahhüt ettiğimizde, bu, Çalışma Dizini dosyasında yaptığımız değişiklikleri yerel Depoya (.git) kaydeder.

3) Uzak Depo ----- Bu, dünyanın herhangi bir yerinde bulunan sunucularda olduğu gibi sistemimizin dışında bulunmaktadır. Github gibi. PUSH komutunu verdiğimizde, yerel depomuzdaki kodlar bu Uzak Depoya kaydedilir


7

Sadece aşağıdaki noktaları eklemek istiyorum:

Yon, git pushyerel şubenizde yapılan taahhütleri uzak bir depoya itmek için kullandığımız sürece taahhütte bulunamaz .

git pushKomut iki argüman alır:

Uzak ad, örneğin, origin bir dal adı, örneğin,master

Örneğin:

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

4

Çok kaba bir benzetme: git commitdüzenlenmiş bir dosyayı kaydetmeyle karşılaştırırsak , o git pushdosyayı başka bir konuma kopyalardık.

Lütfen bu benzetmeyi bu bağlamın dışına çıkarmayın - işlemek ve itmek, düzenlenen bir dosyayı kaydetmek ve kopyalamak gibi değildir. Bununla birlikte, karşılaştırma uğruna tutunmalıdır.


1

Git komutları kullanımını anlamak kolaydır addve commithayal eğer bir günlük dosyası Github üzerinde depoda muhafaza ediliyor. Benim için tipik bir projenin günlük dosyası şöyle görünebilir:

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

Genellikle güne bir git pullistekle başlarım ve bir git pushistekle bitiririm. Dolayısıyla, bir günlük kaydın içindeki her şey, aralarında olanlara karşılık gelir. Her gün, tamamladığım ve birkaç dosyayı değiştirmeyi gerektiren bir veya daha fazla mantıksal görev var. Bu görev sırasında düzenlenen dosyalar bir dizinde listelenir.

Bu alt görevlerin her biri (Görev A ve Görev B burada) bireysel taahhütlerdir. git addKomut 'Dosya Endeksi Değişti' listesine dosya ekler. Bu işleme evreleme de denir ve gerçekte değiştirilen dosyaları ve yapılan değişiklikleri kaydeder. git commitKomut kayıtları / değişiklikleri ve daha sonra başvurmak üzere kullanılabilecek bir özel bir mesajla birlikte gelen işaret listesini sonuçlandırır.

Hala deponuzun yerel kopyasını değiştirdiğinizi, Github'daki kopyayı değiştirmediğinizi unutmayın. Bundan sonra, yalnızca bir git pushkayıt yaptığınızda, kaydedilen tüm değişiklikleri, her bir taahhüt için dizin dosyalarınızla birlikte, ana depoda (Github'da) oturum açın.

Örnek olarak, o hayali günlük dosyasındaki ikinci girdiyi elde etmek için yapardım:

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

Özetle, git addve git commitsen sistematik mantıksal alt değişikliklere ana deposuna bir değişiklik yıkmak sağlar. Diğer cevapların ve yorumların işaret ettiği gibi, bunların daha fazla faydası vardır. Ancak, bu, Svn gibi diğer popüler sistemlerin aksine, çok aşamalı bir revizyon kontrol sistemi olmanın en yaygın kullanımlarından ve sürüş ilkelerinden biridir.


0

git taahhüdü değişikliklerimizi resmi olarak kaydetmekten başka bir şey değildir, taahhüt mesajı verdiğimiz her taahhüt için, taahhütlerle işimiz bittiğinde değişikliği global olarak görmek için uzaktan kumandayı itebiliriz

yani uzaktan kumandaya geçmeden önce çok sayıda işlem yapabiliriz (taahhütlerin listesini ve mesajları da görebiliriz) git, her bir taahhüdü 40 haneli kod olan taahhüt kimliğiyle kaydeder

ve git push sadece uzaktan benim değişikliği görmek istediğimde kullanın (Orada sonra kodumu jenkins çalışıp çalışmadığını kontrol edecek)


-1

Temelde git commit değişikliklerinizi yerel deponuza koyarken git push değişikliklerinizi uzaktaki yere gönderir. Git dağıtılmış bir sürüm kontrol sistemi olduğu için fark, taahhüdün yerel deponuzda değişiklik yapmasıdır, oysa push, değişiklikleri uzaktan repoya kadar iter

kaynak Google

http://gitref.org/basic/ bu bağlantı da çok faydalı olacak

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


Bu cevap, diğer cevaplar kelimesini bire kopyalar.
Jeffery Opoku-Mensah

Daha önce söylenenlere yeni bir şey getirmiyor ...
Hublo

-1

layman terimleriyle, dosyanızı başarılı bir şekilde github'a gitmek için bu sırayla çalıştırmadan git commitönceki adımdır git push.


-2

git commityerel repoda hazırlanan dosyaları teslim etmektir. git pushyerel tarafın ana dalını uzak ana dal ile hızlı bir şekilde birleştirmektir. Ancak birleştirme her zaman başarılı olmaz. Reddetme görünürse, pullbaşarılı olabilmeniz için yapmanız gerekir git push.


Bazı insanlar çekme yerine zorla itmek isteyebilir. Bu duruma bağlıdır. Eğer (hatta uzak bir repo) diğer insanlarla paylaşmıyorum olduğumuz bir dal üzerinde rebased hareketin iseniz Aslında, daha sonra çekerek kesinlikle değil sen ne yapmak istediğini.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.