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 → Ekip → Geç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.