Mevcut ve son sürüm arasında fark bulma


670

Git'i kullanarak mevcut ve son sürüm arasındaki farkı nasıl bulabilirsiniz?

git diff last version:HEAD

1
Repo'nuzun bulut konumu için GitHub'ı kullanıyorsanız çok basittir: projenize gidin ve projenizi görüntüleyen tabloda "taahhütler" başlığına tıklayın
David Lundquist 29:17

1
“Mevcut ve son versiyon” un anlamı gerçekten soruya açıklığa kavuşturulmalıdır.
faintsignal

Yanıtlar:


1170

"Son versiyon" un anlamını gerçekten anlamıyorum.

Önceki komuta HEAD ^ ile erişilebildiğinden, şöyle bir şey aradığınızı düşünüyorum:

git diff HEAD^ HEAD

Git 1.8.5 itibarıyla @, bir takma addır HEAD, bu nedenle şunları kullanabilirsiniz:

git diff @~..@

Aşağıdakiler de işe yarayacaktır:

git show

Eğer kafa ve herhangi bir taahhüt arasındaki farkı bilmek istiyorsanız:

git diff commit_id HEAD

Ve bu görsel fark aracınızı başlatır (yapılandırılmışsa):

git difftool HEAD^ HEAD

HEAD ile karşılaştırma varsayılan olduğundan ( Orient tarafından belirtildiği gibi) atlayabilirsiniz :

git diff @^
git diff HEAD^
git diff commit_id

Uyarılar

  • @ScottF ve @Panzercrisis, Windows'ta ~karakterin yerine karakterin kullanılması gerektiğini açıklıyor ^.

Daha önce kararlı versiyon ve versiyon gibi bir şey istedim ... git diff head head-1
Rajeev

7
Git 1.8.5 itibariyle @, bir takma addır HEAD. Beri ~ve ^geri taahhüt tek giderken aynı, ben bulmak git diff @~..@yazmak için çok daha kolay.
Andrew

80
@Andrew git showhala daha kolaydır, çünkü @~..@gösterilecek varsayılan şey budur.
amalloy

3
git showyalnızca taahhüt mesajını yazdırır, en azından Git 2.5.4'te (Apple Git-61) belirli değişikliklerin bir farkını çıkarmaz, bu nedenle aslında OP'nin sorusuna bir cevap olmaz.
user1944491

1
Sorun git showvarsa yani HEADbir birleştirme birleştirme herhangi bir değişiklik kendisi olmayabilir taahhüt beri beklediğiniz almazsınız işlemek. git diff HEAD^ HEADsürümler arasındaki gerçek değişiklikleri gösterecektir
RubenLaguna

158

"Geçerli sürüm" ün çalışma dizini ( HEADtaahhüt edilmemiş değişiklikler) ve "son sürüm" (geçerli dal için son yapılan değişiklikler) olduğunu varsayarsak ,

git diff HEAD

Aşağıdakiler için kredi kullanıcıya gider Cerran.

Ve -aişlediğinizde hazırlama alanını her zaman atlarsanız, kullanabilirsiniz git diff.

özet

  1. git diff işaretlenmemiş değişiklikleri gösterir.
  2. git diff --cached aşamalı değişiklikleri gösterir.
  3. git diff HEAD tüm değişiklikleri gösterir (hem aşamalı hem de yazdırılmamış).

Kaynak: git-diff (1) Kılavuz Sayfası - Cerran


16
Ve -ataahhütte bulunduğunuzda her zaman hazırlama alanını atlarsanız , o zaman kullanabilirsiniz git diff. <1> değişmemiş değişiklikleri git diffgösterir . <2> aşamalı değişiklikleri gösterir . <3> tüm değişiklikleri gösterir (hem aşamalı hem de etiketsiz). Kaynak: git-diff (1) Kılavuz Sayfasıgit diff --cachedgit diff HEAD
Cerran

1
Bu, kabul edilen cevap olmalıdır, çünkü sorunun amacına cevap vermektedir.
tgoneil

Git'deki "şu andaki işaretlenmemiş sürümün" adı nedir? Aslında bir isim var mı?
Mathieu CAROFF

118

Amalloy tarafından yapılan bir yorumda belirtildiği gibi , "mevcut ve son sürümler" ile son işlem ve ondan önceki işlem anlamına gelirseniz,

git show

5
Aradığım şey buydu. Mükemmel cevap.
CodeManiak

12
Daha eski taahhütler için git show HEAD~1son-ama-one taahhüdünü ve git show HEAD~2diğerlerini göstermek için kullanın . Üzerinden sadece tek bir dosya göster git show HEAD~2 my_file.
Florian Brucker

60

Son fakat bir taahhüt ve son taahhüt arasındaki fark (artı varsa mevcut durum):

git diff HEAD~

ve hatta (yazması daha kolay)

git diff @~

nerede @için synonim olan HEADcari şube ve ~araçlarının "Bana bahsedilen revizyonu ebeveyn vermek".


Oldukça beğendim git diff HEAD^(eşdeğer HEAD~formdan ziyade ). Benim gibi bir "eski git" için hatırlamak biraz daha kolay ;-)
sxc731

3
Havuç bazı terminallerde bir sorundur. Seçenek için güzel
light24bulbs

1
Cevap açıklayan tarafından geliştirilebilir ~ve @ortalama.
Bob Stein

1
Sadece son işlemde neyin taahhüt edildiğini kontrol etmek istiyorsak, bunu kullanmayın (kirli değişiklikler farkı etkiler). Gerçekten daha kısa bir sözdizimi diff HEAD^ HEADolmalıdır git diff @^!. Bkz git-scm.com/docs/gitrevisions içinr1^!
Johnny Wong

@JohnnyWong Açıklamanız için teşekkür ederiz. Okuyucuları karıştırmamak için "mevcut durum" dan bahsettim.
Tomilov Anatoliy

53

Siz de bu şekilde yapabilirsiniz:

Önceki taahhütle karşılaştır

git diff --name-status HEAD~1..HEAD

Mevcut ve önceki iki işlemle karşılaştırın

git diff --name-status HEAD~2..HEAD

16

Eklediyseniz cachedancak henüz işlemediyseniz bayrağı kullanın :

git diff --cached --color

1
Bu soruyu bulduğumda aradığım şey buydu. Teşekkürler!
William Rogers

7

Ustada olduğunuzu varsayarak hızlı ve basit:

    git diff (checkout_id):file.txt file.txt

Misal:

    git diff asdfioei91819280din198:file.txt file.txt

4

Öncelikle git logdepo günlüklerini listelemek için " " kullanın.

Şimdi, iki taahhütle ilgili iki taahhüt kimliğini seçin. Farkları görmek istersiniz ( örnek - En yüksek taahhüt ve bazı eski taahhütler (mevcut sürüm ve bazı eski sürüm beklentinize göre) ).

Sonra, şunu kullanın:

git diff <commit_id1> <commit_id2>

veya

git difftool <commit_id1> <commit_id2>

3

Üst taahhüt HEAD tarafından işaret edilirse, böyle bir şey yapabilirsiniz:

commit1 -> HEAD
commit2 -> HEAD~1
commit3 -> HEAD~2

Birinci ve ikinci taahhüt arasındaki fark:

git diff HEAD~1 HEAD

Birinci ve üçüncü taahhüt arasındaki fark:

git diff HEAD~2 HEAD

İkinci ve üçüncü taahhüt arasındaki fark:

git diff HEAD~2 HEAD~1

Ve bunun gibi...


2

Kullandığım Bitbucket ile Eclipse Eclipse ile IDE Eğit eklentisi yüklü değil.

Geçmişinin herhangi bir sürümünden ( SVN gibi ) bir dosyayı karşılaştırırım .

Menü Proje Gezgini → Dosya → sağ tıklayın → EkipGeçmişte göster .

Bu, dosyadaki tüm değişikliklerin geçmişini getirir. Şimdi Ctrltıklayın ve iki sürümü seçin → "Birbiriyle karşılaştırın" .


2

Bu aynı zamanda etiketler için de işe yarayacaktır (tüm değişiklikleri görmeniz gerekiyorsa aşağıdaki 'uniq'i ve diğer parçaları kaldırın):

 git diff v1.58 HEAD 

Aşağıdakiler aynıdır ve bu, monolitik bir havuzdaki mikro hizmetler için sürekli entegrasyon (CI) için yararlı olabilir :

git diff v1.58 HEAD  --name-only | sort -u | awk 'BEGIN {FS="/"} {print $1}' | uniq
<Folder Name> 

(Kredi - https://dzone.com/articles/build-test-and-deploy-apps-independently-from-a-mo )

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.