Git: Yerel bir deponun güncel olup olmadığını nasıl kontrol edebilirim?


85

Yerel depomun güncel olup olmadığını bilmek istiyorum (ve değilse, ideal olarak değişiklikleri görmek isterim).

Nasıl yapmadan bu kontrol edebilir git fetchya git pull?

Yanıtlar:


96

Deneyin git fetch --dry-run Kılavuz ( git help fetch) diyor ki:

--dry-run
Show what would be done, without making any changes.

3
Teşekkürler! Yine de, hangi dosyaların eklendiğini / değiştirildiğini / kaldırıldığını çıktıdan anlamak zor.
Misha Moroshko

1
Hangi etiketlerin güncellendiğini ve çeşitli dallar için start..end commit aralığını göreceksiniz. Bu yeterli değilse, kendi şube çalışmanızı etkilemeden size uzaktan kumandanın uygun, ayrı, yerel bir kopyasını verecek uygun bir getirme (çekmeyin) olarak yapın. Bir çekme ikisini birleştirmeye çalışacaktı, ki bu istediğin şey değil. Veri aktarımı, kuru çalıştırsanız da çalıştırmasanız da aynıdır.
Philip Oakley

4
neden koştuğumda git fetch --dry-runhiçbir şey görünmüyor?
Paramvir Singh Karwal

3
@ParamvirSinghKarwal Git rapor ettiklerinde seyrek. Söyleyecek bir şey yoksa, hiçbir şey olmamış gibi hiçbir şey söylemiyor. Belki de normal getirmenizin refspec'i için güncelsiniz. Belki ekler --allmisin?
Philip Oakley

2
@AaronBeall Eğer durum buysa, bu büyük olasılıkla bu değişiklikleri zaten yerel olarak getirdiğiniz (yani getirecek hiçbir şey yok), ancak henüz bunları şubenizde birleştirmediğiniz anlamına gelir. git pullkabaca eşittir a git fetch && git merge. Herhangi bir noktada getirmeyi olmadan çalıştırdıysanız, --dry-runzaten yerel olarak bir şeyler getirmişsinizdir .
DuckPuppy

36
git remote show origin

Sonuç:

HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (local out of date) <-------

Bu, tüm zamanların dallarını listeler. Uzun bir geçmişe sahip bir deponuz varsa, çıktı oldukça dağınıktır.
Paulo Carvalho

28

İlk kullanım git remote update, uzaktan kumandalarınızı güncel hale getirmek için. Ardından, aşağıdakiler gibi birkaç şeyden birini yapabilirsiniz:

  1. git status -unotakip ettiğiniz şubenin önde mi, geride mi yoksa sapmış mı olduğunu size söyleyecektir. Hiçbir şey söylemiyorsa, yerel ve uzak aynıdır. Örnek sonuç:

DEV şubesinde

Şubeniz 7 kaydetme ile "kaynak / DEV" gerisinde ve hızlı ileri sarılabilir.

(yerel şubenizi güncellemek için "git pull" kullanın)

  1. git show-branch *master isimleri 'ana' ile biten tüm branşlardaki taahhütleri gösterecektir (örneğin, ana ve başlangıç ​​/ ana).

Eğer kullanırsanız -vgit uzaktan güncelleme ile ( git remote -v updateeğer gerçekten başka komutları gerekmez) Eğer dalları güncellenmiş var olduğunu görebilirsiniz.


2
Bu neden bu kadar aşağıda? git remote update ; git status -unoçözüldü. git fetch --dry-runyerelin uzakta olduğu durumlarda bile çıktı vermedi.
Aaron Beall

17

git status -unoyerel şubenizin menşe şubenizle güncel olup olmadığını kontrol etmek için kullanabilirsiniz .


19
Sadece yerel durumu verir, uzak şubeyle kontrol etmez.
İşhan Liyanage

4
Sadece yerel verir, ama git remote update ; git status -unohile yaptı! git fetch --dry-runBen bunu beklenen (ve ne zaman hiçbir çıkış verdi git pullşeyler çekeceği).
Aaron Beall

1
Bu cevap yanlış ve silinmesi gerekiyor. Olduğu gibi, Git'in nasıl çalıştığına dair çok yaygın ama yanlış bir efsaneyi sürdürüyor, yalnızca birisi ona yorumları okumaya karar verdiğinde / olduğunda ortadan kalkıyor.
Prometheus

8

Pek değil - ama git fetchyerel şubelerinizden hiçbirini değiştirmeyeceği için ne kadar acı çekeceğini anlamıyorum.


Buna tamamen katılıyorum. Git çekme, dosyaların üzerine yazarak zarar verebilir. Ancak git fetch yalnızca meta verileri çekerek git status gibi komutların yerel deponuzun güncel olup olmadığını herhangi bir dosyanın üzerine yazmadan size söylemesine izin verir. Sorunun harfine cevap vermeyebilir, ancak sorunun ruhuna cevap vererek size istediğiniz aracı verir. Git getir, sonra git durumu, dosyaların üzerine yazmadan uzaktaki yerel deponuzun nerede olduğunu söyleyecektir.
merlit64

5

Diğer bir alternatif, şubeyi deponuzun yanı sıra tüm uzaktan kumandalarda git show-branch remote/branchgörmek git show-branch *branchiçin görebileceğiniz bir karşılaştırma olarak kullanmak için kullanarak uzak şubenin durumunu görüntülemek ! daha fazla https://stackoverflow.com/a/3278427/2711378 için bu yanıta bakın


5

İki komut vermeniz gerekecek:

  1. git getirme kaynağı
  2. git durumu

1
Bu işe yarıyor, ancak soru 'getirme' olmadan açıkça söylüyor. Yerel deponuzun, değişiklikleri gerçekten getirmeden veya birleştirmeden uzak depodan nasıl farklı olduğunu bilmek istediğiniz birçok durum vardır.
pedram bashiri

1
@pedrambashiri Ne gibi gerçekten merak ediyorum? Bildiğim kadarıyla bir getirme tek başına hiçbir şeye zarar veremez.
Prometheus

@Prometheus ilk olarak, bir soru açıkça 'getirmeden' ifade ettiğinde, cevabınızda getirmeyi kullanmanın başka bir yolu yoksa ya da olmadan yapmak için gerçek bir durum yoksa, ihtiyaç duyduğunu belirtmek istedim. cevapta açıklanacak. Ancak sorunuzu yanıtlamak için, uzak deponun yerel kopyasını bir getirme günceller. Bu gönderideki
pedram bashiri

4

git fetchYerel deponuzu uzak sunucunuzdaki dosyalarla karşılaştırmadan önce çalıştırmanız gerekir .

Bu komut yalnızca uzaktan takip şubelerinizi günceller ve siz git mergeveya aranana kadar çalışma ağacınızı etkilemez git pull.

Yerel şubeniz ile uzaktan izleme şubeniz arasındaki farkı görmek için , burada açıklandığı gibi git diff veya git cherry kullanabilirsiniz .


2

Eğer kullanırsan

git fetch --dry-run -v <link/to/remote/git/repo>

güncel olup olmadığı hakkında geri bildirim alacaksınız. Yani temel olarak, daha önce verilen cevaba "ayrıntılı" seçeneğini eklemeniz yeterlidir.


1

git fetchVeya kullanmadan bu imkansızdır git pull. "Güncel" nin ne anlama geldiğini görmek için uzak depoya gitmeden deponun "güncel" olup olmadığını nasıl bilebilirsiniz?


5
Lütfen bunu onaylayın! Ne düşündüğünü cevapladın! Yeni başlayanlar onunla takla atacağından daha dikkatli olmalısın!
Amanuel Nega

4
@AmanuelNega: Bu sadece basit bir mantık. Yerel deponuzun uzak depoyla aynı durumda olup olmadığını bilmek istiyorsanız, uzak deponun durumunu bilmeniz gerekir. Dönem. Uzak deponun durumunu bilmiyorsanız, yerel deponun aynı durumda olup olmadığını muhtemelen bilemezsiniz. git pullOP'nin sorusunda açıkça yasakladığı en yüksek oylanan ve kabul edilen cevabın kullanıldığına dikkat edin.
Jörg W Mittag

2
Haberdar olmak! git status -unobu çalışır ve git show-branch *mastertüm ana dalların durumunu görmek için de kullanılabilir ! Hala imkansız olduğunu mu söylüyorsun? Uzaktan kumandaya erişiminiz olduğu sürece herhangi bir şubenin durumunu görebilirsiniz!
Amanuel Nega

2
@AmanuelNega: git statussize yerel hakemlerimizle durumunu anlatır ancak, bu mu değil yerel hakemler uzak hakemlerimizle yukarı-güncel olup olmadığını söyleyecektir. Tekrar: Uzak reponun durumunu öğrenmeden uzak reponun durumunun ne olduğunu bilmek mantıksal olarak imkansızdır. Dönem. Bu sadece uzay-zamanın temel yasalarıdır.
Jörg W Mittag

6
Bu "mantıksal olarak" imkansız değildir çünkü açık bir şekilde biri sunucu odanızdaki birini arayabilir ve "ana daldaki HEAD'inizin karması nedir" diyebilir ve size söyleyebilirler ve daha sonra yerel bölgeyi kontrol edebilir ve yapmadığınızı görebilirsiniz. o karma yok. Artık senkronize olmadıklarını biliyorsunuz.
James Robinson

1

cevabımı biçimlendirmeye çalıştım ama yapamadım.Lütfen stackoverflow ekibi, cevabı göndermek neden bu kadar zor?

asla

cevap:
git kaynak
git durumunu getir ("Dalınız 9
kaydetme ile 'kaynak / ana' gerisinde" gibi bir sonuç göreceksiniz) uzak değişiklikleri güncellemek için: git çekme

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.