Git ile itmek üzere olduğum şeyi nasıl görebilirim?


588

Bir git pushemir yaparsam neyin itileceğini görmenin bir yolu var mı ?

Resim yaptığım şey Github'un "çekme isteği" özelliğinin "Dosyalar Değişti" sekmesi gibi bir şey. Bir çekme isteği yayınladığımda, çekme isteğimi kabul ederlerse ne çekileceğini görebilir ve görebilirsiniz:github toplu değişiklik örneği

Komut satırı iyi, ancak bir çeşit GUI'yi tercih ederim (yukarıdaki ekran görüntüsü gibi).



İlgili birçok soru / cevap; başka bir tane var: stackoverflow.com/questions/2176278/preview-a-git-push/…
michael

Yanıtlar:


665

Aktarılacak dosyaların bir listesi için şunu çalıştırın:

git diff --stat --cached [remote/branch]

misal:

git diff --stat --cached origin/master

Aktarılacak dosyaların kod farkları için şunu çalıştırın:

git diff [remote repo/branch]

Değişecek dosyaların tam dosya yollarını görmek için şunu çalıştırın:

git diff --numstat [remote repo/branch]

Bu farkları bir GUI'de görmek istiyorsanız, bunun için git'i yapılandırmanız gerekir. Bkz. 'Git diff' çıktısını görsel bir fark programıyla nasıl görüntülerim? .


8
Bir git komutu olmadan önbelleğe alınan her iki git farkı da yalnızca HEAD ile ilgili farkları gösterecektir. Sanırım git diff [--stat] --cached orijin / master demek istediniz, kaynağın ana şubesinin master olduğunu
varsayalım

52
Tam olarak istediğiniz bu değil. Dizine HEADdeğil, kökene ( git diff origin/master HEAD) göre farklılık göstermelisiniz . Dizinin farklılaştırılması, yalnızca taahhüt için herhangi bir değişiklik yapılmadıysa aynı sonuçları verir. Aşamalı değişiklikleriniz varsa, farklara dahil edilirler, ancak henüz taahhüt edilmedikleri için açıkça itilmezler.
Cascabel

5
@Jefromi'nin yorumunda yer alan bilgileri de içerecek şekilde bu cevabın düzenlenmesi gerekiyor git diff --stat origin/master HEAD.
Tony Topper

2
@mfontani benim için doğru cevaba sahip. Değiştirdiğim her şeyi taahhüt edersem ne yapacağımı değil, zaten taahhüt ettiğim şeyden neyin itileceğini kontrol etmek istiyorum. git diff --cached [remote/branch]hile yok :)
poshaughnessy

2
origin / master yazmak yerine, @ {u} örneğin git diff @ {u} veya git diff HEAD @ {u} kullanabilirsiniz. Nerede bağlantılı olduğunu düşünmem gerekmediği için çok fazla şube ve uzaktan kumanda aldığımda yararlı buluyorum.
Damien Sawyer

192

Her zaman kuru çalışma vardır:

git push --dry-run

Verilerin gerçekte gönderilmesi dışında her şeyi yapacaktır.

Daha grafik bir görünüm istiyorsanız, birçok seçeneğiniz vardır.

Tig ve git ile gelen gitk betiği hem yerel kopyanızın geçerli dalını hem de uzaktan kumandanın veya başlangıç ​​noktasının dalını görüntüler.

alternatif metin

Yani menşeinden sonra yaptığınız herhangi bir taahhüt, itilecek olan taahhütlerdir.

Yazarken itmek istediğiniz gitk&daldayken kabuktan gitk'i açın, ardından uzaktan kumandadaki ve uzaktan kumandaya itmek üzere olduğunuz şey arasındaki farkı görmek için, yerel sıkıştırılmamış işleminizi seçin ve uzaktan kumandayı sağ tıklayın ve "Bunu zorla -> seçildi" seçeneğini belirleyin: alternatif metin


18
git push --dry-run bana görmeyi umduğum gibi bir şey göstermiyor. gitk daha yakın, ancak itilecek tüm değişikliklerin toplamını göstermiyor. Yani 6 taahhüdü uzaktan kumandaya itiyorsam, itilecek toplamın toplamını görmek istiyorum. Her bir taahhüdün ayrı ayrı sahip olduğu umurumda değil çünkü bir taahhüt bir sonraki tarafından tamamen reddedilebilir.
cmcculloh

1
Neyin itileceğini fark ederseniz, git diff --stat HEAD origin/masterya da yapın git diff HEAD origin/master. Önemli HEAD , aksi takdirde farkınıza değişmeyen değişiklikler eklersiniz
Daniel Alder

Git, verileri uzaktan kumandaya aktarmaya çalışmadan önce otomatik olarak kuru çalışma yapmamasının bir nedeni var mı? Çok miktarda veri gönderiyorsanız, tüm verileri yükler ve ardından gelen hataları gösterir. Şimdi yeniden yüklemeniz gereken verileri ve bant genişliği yükleme verilerini yeni harcadınız. Bu tuhaf bir davranış gibi görünüyor.
zeusstl

1
Sorun git push --dry-run, uzaktan kumandada hala yazma izni gerektirmesidir. Dolayısıyla, yukarı doğru itme izni olmayan bir klonunuz varsa, ancak yerel bastırılmamış değişikliklerinizin ne olduğunu görmek istiyorsanız, --dry-runbunu yapmayacaksınız.
Ed Avis

Bu iyi bir çözümdür, ancak uzaktan kumandaya bağlanmayı gerektirdiğine dikkat edilmelidir (varsa SSH anahtarının girilmesi dahil). Eğer branchve arasındaki farkı görmek istiyorsanız origin/branch, Ionuț G. Stan'ın cevabına giderim, çünkü aslında uzak repoya bağlanmayı gerektirmez. İhtiyacınız olan şeye bağlı olarak bu iyi veya kötü olabilir.
Sean the Bean

169

Sadece itilmeyi bekleyen taahhütleri listelemek için: ( hatırlayacağınız budur )

git cherry -v

SHA1'lerin yanındaki taahhüt konularını gösterin.


5
İlginç bir şey, karşılaştırmak için bir uzaktan kumanda belirtebilirsiniz: git cherry -v heroku/remotekodunuzu birden fazla uzaktan kumandada tutmanız durumunda.
fagiani

Bu taahhütlerin içerdiği farklılıkları gerçekten ilişkilendirmemize izin veren en iyi tamamlayıcı komut nedir?
Hassan Baig

Bu komut güzel, ama itme sırasında değiştirilecek dosyaların adları gibi daha fazla ayrıntı istiyorum.
LS

21

Muhtemelen kaçmak istiyorsun git difftool origin/master.... mevcut dalınızda henüz başlangıç ​​/ ana dalda olmayan birleşik farkını göstermeli ve seçtiğiniz grafik fark aracında göstermelidir. En güncel olmak için önce çalıştırın git fetch.


2
git difftool -d origin/master, Ben difftool uyumak için ayarlanmış var, bu yüzden harika çalışıyor, thx!
Kova Gücü

git difftool -dçok daha iyi, teşekkürler Kova Gücü. Tek sorun, taşınan dosyaları algılamaması ve bunun yerine silindi ve eklendiğini göstermesidir.
EM0

8

Yerel sürümü uzaktan repoya basmadan önce karşılaştırmanın bir yolu (kuru çalıştırmada bir tür itme):

TortoiseGit'i kullanın:
Kök klasör projesine sağ tıklayın> TortoiseGit> Önceki sürümle farklılaştır>
Sürüm 2 içinrefs/remotes/origin/master


8

Deneyin git diff origin/master..master(bunun origin/masteryukarı akışınız olduğunu varsayarak ). Bunun aksine git push --dry-run, yukarı akışa yazma izniniz olmasa bile bu yine de çalışır.


5

Kullanın git gui, orada gerçek taahhüdünüzde nelerin değiştiğini görebilirsiniz. Ayrıca gitkreflogs için kolay bir arayüz sağlar. Sadece neyin itileceğini görmek remotes/...ve mastergörmek için karşılaştırın . Ekran görüntünüze benzer bir arayüz sağlar.

Her iki program da git'e dahildir.


1
Git gui'de işlenmiş ancak itilmemiş her şeyi gösteren hiçbir yer görmüyorum.
cmcculloh

Git gui'de neler değiştiğini, ancak değişmediğini görebilirsiniz. Gik içinde (Via gitk --alltüm yorumların tam bir listesini almak. Şimdi dev-şube gerçek durumunu itmek için uzaktan ile karşılaştırabilirsiniz.
fuz

4

Değiştirilir hangi dosyaların görmek için ve kıyasla gerçek kod değişikliklerini görüntülemek masterşunu kullanabilirsiniz şube:

git diff --stat --patch origin master

NOT : Intellij IDE'lerinden herhangi birini kullanırsanız, üst düzey projenizi sağ tıklatıp Git > Şube ile karşılaştır > seçeneğini belirleyin ve istediğiniz kaynağı seçin origin/master. Görünen dosya ağacında, görsel bir fark görmek için dosyaları çift tıklayabilirsiniz. Yukarıdaki komut satırı seçeneğinin aksine, yerel sürümlerinizi diff penceresinden düzenleyebilirsiniz.


3

Taahhütleri şu şekilde listeleyebilirsiniz:

git cherry -v

Ve sonra, ^ sayısının taahhüt sayısına eşit olduğu aşağıdaki komutla karşılaştırın (örnekte 2 komutu):

git diff HEAD^^

En son taahhütlerin listesini görmek sadece iyi bir şey. Bu dosya (lar) ın adını vermeyecektir. Bu nedenle bazılarının kuru çalışma seçenekleri ve yama seçenekleri kullanılarak cevaplanması daha iyidir. git diff --stat --patch origin master git push - kuru çalışma
Sree Rama

2

Mac OS X kullanıyorsanız, Tower'ı almanızı tavsiye ederim, Git ile uğraşmayı benim için bir zevk haline getiren harika bir program. Artık terminal komutlarını hatırlamak zorundayım ve dosyalardaki farklılıkları görüntülemek, izlemek ve çözmek için harika bir GUI sunuyor.

Ve hayır, onlara bağlı değilim, sadece yazılımlarını kullanıyorum ve gerçekten beğendim.

http://www.git-tower.com/


2
Tower kullanıyorum ama kaydedilmiş ancak aktarılmamış dosyaları nasıl görebiliyorsunuz?
Michael Irey

Bu soruya cevap vermiyor.
reinierpost

1

Sadece iki sentimi eklemek için ... Bir gitlab koşucusundaki bir gitlab boru hattında iş yürütürken bunu uygulamak istedim. Bunu yapmanın en iyi yolu bu komut dosyasını kullanmaktı:

git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA

Ayrıca benim durumumda kullandığım bunu elde etmek için dosya uzantısına göre filtre uygulamak istedim:

git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA '*.py'

Bundan sonra, örneğin bu listeyi başka bir yere iletebilirsiniz, belki bir linter;)

Umarım bu birine yardımcı olur.


1
  1. Uzaktan kumandada yazma izniniz varsa
git push --dry-run
  1. Uzaktan kumandada yazma izniniz yoksa
git diff --stat HEAD remote/branch

0

Sonra git commit -m "{your commit message}", itmeden önce bir karma hash alırsınız . Böylece git, aşağıdaki komutu çalıştırarak neyle itmek üzere olduğunuzu görebilirsiniz :

git diff origin/{your_branch_name} commit hash

Örneğin: git diff origin/master c0e06d2


Yanıtladığınız için teşekkür ederiz, ancak soru oldukça eski ve çok oy verildiği için bu çabanın gerekli olmadığını düşünüyorum. Farklı sorulara çaba harcamak daha iyidir.
Pbd
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.