Soru Sahnelenen değişiklikleri nasıl gösterebilirim?


İşlenecek birkaç değişiklik yaptım; Bir sonraki işlem için sahnelenen tüm dosyaların dağılımını nasıl görebilirim? farkındayım git durumuama asıl farkları görmek isterim - sadece sahnelenen dosyaların isimlerini değil.

Onu gördüm Git-diff (1) adam sayfa diyor

git diff [--options] [-] […]

Bu form, dizine göre yaptığınız değişiklikleri (sonraki işlem için hazırlama alanı) görüntülemektir. Diğer bir deyişle, farklılıklar senin could dizine ekleyebilmek için git'e söyle, ama hala yapmadın. Bu değişiklikleri git-add (1) kullanarak gerçekleştirebilirsiniz.

Ne yazık ki, bu konuda bir şey ifade edemiyorum. Bir takma ad oluşturabileceğim kullanışlı bir tane olmalı, değil mi?


1698
2017-10-19 09:57


Menşei


git status -v çok çalışıyor. Görmek cevabım aşağıda - VonC
@VonC Bunu her zaman kullanırım, ancak less, de olduğu gibi: git status -v | less - Yönetilebilir parçalar :) - Mr Office


Cevaplar:


Sadece olmalı:

git diff --cached

--cached önbellek / dizindeki değişiklikleri (yani aşamalı değişiklikler) geçerli değere göre gösterir HEAD. --staged bir eşanlamlı --cached.

--staged ve --cached işaret etmiyor HEAD, sadece saygı ile fark HEAD. Kiralamak için ne kullanacağınızı git add --patch (veya git add -p), --staged sahnelenen şeyi geri döndürecektir.


2103
2017-10-19 10:07



Sadece dosya adlarını istiyorsanız, aşağıdakileri yapın git diff --name-only --cached gönderi başına stackoverflow.com/a/4525025/255187 - Michel Hébert
Bunu şununla kullanın: git difftool --staged ziyade git diff --staged Her dosyada varsayılan görsel farklılık aracını başlatmak için. difftool için ikame edilebilir diff diğer argümanlar ile birlikte. - LightCC


Basit bir grafik bunu daha net hale getirir:

Simple Git diffs

git diff

Çalışma dizini ile dizin arasındaki değişiklikleri gösterir. Bu, neyin değiştiğini gösterir, ancak bir taahhüt için sahnelenmez.

git diff --cached

Dizin ile HEAD arasındaki değişiklikleri gösterir (bu daldaki son işlem). Bu, endekse nelerin eklendiğini gösterir ve bir taahhüt için düzenlenir.

git diff HEAD

Çalışma dizini ile HEAD (dizindeki değişiklikleri içeren) arasındaki tüm değişiklikleri gösterir. Bu, taahhütte bulunulup oluşturulmadıklarına bakılmaksızın, son taahhütten sonraki tüm değişiklikleri gösterir.

Ayrıca:

Biraz daha fazla detay var 365Git.


1411
2017-10-24 21:05



Bu naif, korkarım (genellikle herhangi bir git açıklama ile olduğu gibi). Yerel değişiklikleriniz varsa foo.c ve gerçekleştirme git add foo.c, sonra foo.c olduğu endekste değil; taahhüt için sahnelenmez. Eğer git diff foo.c naif çalışma ile karşılaştırıldığında foo.c indekse, o zaman boş / varolmayan bir dosya ile tüm içeriği arasındaki dev bir farkı göstermek zorunda kalacaktır. foo.c. Yani, endekste bir dosya yoksa, git diff o dosya için geri düşüyor HEADkopyası. - Kaz
@Kaz kesinlikle konuşmak, endeks değil boş bir sayfa Bu sanal bir kopyası HEAD aşamalı değişiklikler uygulanmış. Git, tüm dosyaları kaydederek değil, değişiklikleri kaydederek çalışır. Bir dosyayı düzenlediğinizde, yalnızca yapılan değişiklikleri depolar. Dizin, sizin belirttiğiniz gibi boşsa, dizindeki değişikliklerin nasıl kaydedileceğini bilmez ve tüm dosyayı "yeni eklenen" olarak kaydetmek zorunda kalır - ki bu yanlıştır. - ADTC
@Kaz Hem endeks hem de HEAD değişmemiş sürümü olacak foo.c dosya (bunlar fiziksel kopyalar değildir, ancak siz ve benim için sadece mantıksal kopyalardır. Git için, bu dosyanın içerdiği her bir işlemin sadece aynı veri akışıdır). Ne zaman yaparsın git diff üzerinde tamamen unstaged foo.c Gerçekten geri dönmek değil HEAD Dizin ile (aslında dosyanın aynı sürümünü içerecek şekilde gerçekleşir) HEAD ) Yapar. Yani grafik doğru. - ADTC
Merhaba, ne anlama geldiğini bilmek isterim "indeks"bu bağlamda? Teşekkürler! - Gab是好人
@Abizern Dizin, aşamalı değişiklikler mi? - Gab是好人


Görsel yan yana görüşle ilgilenecekseniz, dağınık Görsel fark aracı bunu yapabilir. Bazı değişiklikler değil, tüm değişiklikler yapıldığında bile üç bölme gösterecektir. Çakışma durumunda, dört bölme bile olacak.

Screenshot of diffuse with staged and unstaged edits

İle çağırmak

diffuse -m

Git çalışma kopyanızda.

Bana sorarsanız, on yıl boyunca gördüğüm en iyi görsel farklılık. Ayrıca, Git'e özgü değil: SVN, Mercurial, Bazaar, dahil olmak üzere diğer VCS bolluğu ile birlikte çalışır ...

Ayrıca bakınız: Git değişikliğinde hem aşamalı hem de çalışan ağacı göster


52
2018-03-18 07:22



Teşekkürler, bu güzel bir araç gibi görünüyor. Meld'i şu ana kadar Linux için en iyi görsel dağıtım aracı olarak buldum, ancak panodaki metni ayırt edebilmeyi özledim - Meld, giriş için dosya gerektiriyor. Diffüz bunu manuel yeniden düzenlemenin yanı sıra sağlar. Bir süreliğine deneyeceğim. - Drew Noakes
Diffuse.sourceforge.net için kırık bağlantı, kullanın sourceforge.net/projects/diffuse şimdilik. - user1133275
brew install diffuse OS X üzerinde çalışır. Eğer hem kararsız hem de aşamalı değişiklikler yapıldıysa 3 bölme göstermez - dizinde henüz değişiklik yapmadı mı? - Brent Faust
Yaygın olarak hangi sürümünüz var? Evet - bir dosya ekleyip yerel olarak değiştirirseniz, üç bölme göstermelidir. - krlmlr
Ayrıca kurabilirsiniz dağınık varsayılanın olarak difftool ve başlatmak için yerleşik mekanizmayı / aracı / takma adı kullanın. Cevabımı buraya bak:stackoverflow.com/a/45684512/6501141>; - LightCC


Bunu not et git status -v  Ayrıca aşamalı değişiklikleri gösterir! (sahnelenmesi gereken anlamı - git add -- bazı değişiklikler. Aşamalı değişiklik yok, fark yok git status -v.
O zamandan beri Git 1.2.0, Şubat 2006)

Uzun biçiminde (varsayılan), git status HEAD ve indeks arasındaki farkı gerçekten gösteren belgesiz bir "verbose" seçeneğine sahiptir.

Ve daha da eksiksiz hale gelmek üzere: bkz. "Git değişikliğinde hem aşamalı hem de çalışan ağacı göster"(git 2.3.4+, Q2 2015):

git status -v -v

38
2017-08-31 10:05



Son satır olmalı git diff HEAD - artur
@artur neden? Cevabın amacı bundan bahsetmek git status -vv ne de içerir git diff HEAD yapar. - VonC
Üzerinde çalışmıyor git version 1.8.3.1. Biliyorum eski, ama mümkünse, bu bayrağın tanıtıldığı zaman. - onebree
@onebree 1.8.3.1 Haziran 2013, gerçekten eski. Fakat git status -v daha yaşlı (github.com/git/git/commit/..., git 1.2.0, Şubat 2006!). Arasındaki farkın görüntülendiğini unutmayın. indeks ve HEAD: endekse bir şey eklediyseniz (hayır git add), sonra git status -v herhangi bir fark göstermezdi. git status -v -v daha yeni (Git 2.3.4, Mart 2015) - VonC
@ VonC benim hatamdı ... Yaptım git diff -v. - onebree


Bu komutu kullanabilirsiniz.

git diff --cached --name-only

--cachedseçeneği git diff sahnelenen dosyaları almak ve --name-only seçenek sadece dosyaların isimlerini almak demektir.


23
2017-07-19 17:39



Lütfen daha fazla bilgi ile düzenleyin. Sadece kod ve "bunu dene" yanıtları önerilmez, çünkü bunlar aranabilir içerik içermez ve neden birinin "bunu denemesi" gerektiğini açıklamamaktadır. - abarisone


1.7 ve üstü sürümlerden şöyle olmalı:

git diff --staged

15
2017-08-14 23:33





GÖRSEL DİFÜZ ALETİ KULLANIMI

Varsayılan Cevap (komut satırında)

Buradaki en iyi yanıtlar, önbelleğe alınmış / aşamalı değişikliklerin nasıl görüntüleneceğini doğru bir şekilde gösterir. Index:

$ git diff --cached

veya $ git diff --staged bu bir takma addır.


Görsel Diff Aracı'nı Yerine Getirmek

Varsayılan cevap git bash'taki (yani komut satırında veya konsoldaki) fark değişikliklerini dışarı çıkaracaktır. Aşamalı dosya farklılıklarının görsel bir temsilini tercih edenler için, her bir dosya için komut satırında gösterilmekten ziyade görüntülenen her bir dosya için bir görsel fark aracını başlatan bir komut dosyası bulunmaktadır. difftool:

$ git difftool --staged

Bu aynısını şöyle yapacak git diff --stagedfark aracının çalıştırıldığı herhangi bir zaman haricinde (yani, her dosya bir dosya tarafından işlendiğinde), varsayılan görsel farklılık aracını (çevremde) başlatacaktır. KDiff3).

Araç başlatıldıktan sonra, görsel fark aracınız kapanana kadar git diff betiği duracaktır. Bu nedenle, sonraki dosyayı görmek için her dosyayı kapatmanız gerekecektir.


Herzaman Kullanabilirsiniz difftool yerine diff git komutlarında

Tüm görsel farklı ihtiyaçlarınız için git difftool herhangi bir yerine çalışır git diff tüm seçenekler dahil olmak üzere komut.

Örneğin, görsel fark aracının her dosya için yapıp yapmamasını sormadan başlatması için -y seçenek (genellikle bunu isteyeceğinizi düşünüyorum!):

$ git difftool -y --staged

Bu durumda, görsel dif aracındaki her bir dosya birer birer birer yukarı çekilerek, araç kapatıldıktan sonra bir sonraki noktaya getirilir.

Ya da sahnelenen belirli bir dosyanın farklılığına bakmak için Index:

$ git difftool -y --staged <<relative path/filename>>

Tüm seçenekler için, man sayfasına bakın:

$ git difftool --help


Görsel Git Aracını Ayarlama

Varsayılan dışında bir görsel git aracını kullanmak için -t <tool> seçeneği:

$ git difftool -t <tool> <<other args>>

Veya, farklı bir varsayılan görsel fark aracını kullanmak için git'i nasıl yapılandırılacağına ilişkin difftool man sayfasına bakın.


12
2018-03-14 14:30



OP için bunun en iyi cevabı olduğunu düşünüyorum. - Matt Ruwe