dallar arasındaki görsel fark


196

Bu yanıt git'e işaretlenmiş iki dosya arasında görsel bir fark görmek için harikadır: 'git diff' çıktısını görsel bir fark programıyla nasıl görüntüleyebilirim?

Ancak, iki dal arasında görsel bir fark görmek istiyorum. Şimdiye kadar, en iyi bahisim şöyle görünüyor:

git diff --name-status master dev

çok bilgilendirici ve görsel değil.

Dışarıda daha iyi bir şey var mı?


Aşağıda, daha önce burada belirtilmemiş bir görsel içeren bir cevap ekledim: şubelerin hangi taahhütleri içerdiğini (ortak veya benzersiz olarak) nasıl görebilirsiniz. Core git işlevselliği ile yapabileceğiniz çok şey var. Görsel farkınıza neleri dahil etmek istediğinizi belirtmek iyi olabilir. Çoğu yanıt, örneğin belirli bir işlemden etkilenen dosyaların adlarına odaklandığı satır satır taahhüt farklılıklarına odaklanır.
Kay V

Yanıtlar:


227

git diffBir aralık ile kullanın .

git diff branch1..branch2

Bu, her dalın ipuçlarını karşılaştıracaktır.

Gerçekten bazı GUI yazılımları istiyorsanız, Mac OS X ve Windows'u destekleyen SourceTree gibi bir şey deneyebilirsiniz .


27
Görsel bir şey değil. ;)
marines

35
Linux sistemlerde ben yüklenmesi tavsiye Meldsonra, varsayılan olarak ayarlama difftoolile git config --global diff.tool meldve son olarak sade yerine başlatmak diffile git difftool branch1..branch2. Sonuç çok daha hoş görünüyor.
Gabriel

8
git config olmadan Meld visual difftool kullanan :git difftool -t meld branch1..branch2
user3780389

2
Okuyucular için: Yazımdan itibaren, buradaki her cevap, bu cevap dışında kişinin istediği şeyi (GUI'de bir fark) yapmanın bir yolunu verir.
G Huxley

3
@GHuxley OP nerede bir GUI çözümü istiyor?
alex

97

İki dal arasındaki tüm farkların görsel bir farkını görmek için, iki dalı birleştirmeyi - birleştirme işleminden OLMADAN - ve daha sonra git guifarklılıklara genel bir bakış için veya git Uzantıları'nı kullanmayı seviyorum .

Taahhüt etmeden birleştirmek için Git komut satırı:

git ödeme şubesiA
git merge - no-commit --no-ff şubeB

Sonra bittiğinde, birleştirmeyi geri alabilirsiniz

git merge --abort

(yorum için h / t @ jcugat'a)


10
IDE'nizi (veya Git-GUI difftool ile her zaman kolay entegrasyona sahip olmayan) kullanmayı seviyorsanız, bu yaklaşımın önemini hafife almayın! Bu seçenek benim için harika, çünkü Intellij kullanıyorum ve IDE'deki değiştirilmiş dosyalar arasında tüm sözdizimi vurgulanmış, hata vurgulanmış, ölü kod vurgulanmış, düzenlenebilir yerinde ihtişamıyla dönmeyi tercih ediyorum. Tüm kod incelemelerim için bu yaklaşımı kullanıyorum ve GitHub'daki dipsiz çekme isteği karşılaştırma aracını çok geride bıraktım. Ben giderken bile düzenleme yapabilirim ve bittiğinde sadece "-code-review" eklenmiş ve taahhütlü yeni bir şube oluşturuyorum!
kghastie

2
Birleştirme çakışması olmadığı sürece çalışır ve birleştirme çakışmaları olduğunda başarısız olur.
Naga Kiran

1
Bu yaklaşımı çok seviyorum! Ayrıca, en azından benim git guiiçin çatışmaları tatsız, çatışmasız olarak sahneliyor, böylece iyi bir ayrım elde ediyorsunuz. Benim için en çok puan alan cevaptan çok daha fazla yardımcı olur: D
DJGummikuh

55

Intellij Idea IDE kullanıyorsanız, daldaki karşılaştırma seçeneğini kullanabilirsiniz.

resim açıklamasını buraya girin


bu karşılaştırmayı değiştirmek için herhangi bir yapılandırma / seçenek / ayar var mı? (git diff için --ignore-space-at-eol gibi)
Superole

49

Bunu gitk ile kolayca yapabilirsiniz.

> gitk branch1 branch2

Önce dalın ucuna tıklayın 1. Şimdi branş2'nin ucuna sağ tıklayın ve Farkı bu-> seçili seçeneğini seçin.


7
Kullanımı gitk branch1..branch2sadece gösterileri iki revizyon arasında taahhüt.
T3rm1

şubenizde yaptığınız tüm değişiklikleri görmek istiyorsanız gitk (branch1 branch2 olmadan) kullanarak.
mikewasmike

31

TortoiseGit kullanan Windows'takileriniz için, bu oldukça karanlık özellik sayesinde biraz görsel bir karşılaştırma elde edebilirsiniz:

  1. Karşılaştırmak istediğiniz klasöre gidin
  2. Basılı tutun shiftve sağ tıklayın
  3. TortoiseGit -> Referanslara Göz At
  4. ctrlKarşılaştırmak için iki dal seçmek için kullanın
  5. Seçiminizi sağ tıklayın ve "Seçilen referansları karşılaştır" ı tıklayın

Kaynak: http://wikgren.fi/compare-diff-branches-in-tortoise-git-or-how-to-preview-changes-before-doing-a-merge/


Neden vardiyayı basılı tutmalısınız?
Zero3

1
Sağ tıklarken vardiyayı basılı tutmak, TortoiseGit'i belirli öğeleri göstermeyecek şekilde yapılandırdıysanız, her zaman tam TortoiseGit menüsünü getirir.
1616'da

Bu harika. Daha belirgin bir özellik olsaydı.
Drew

22

OSX veya Windows 7+ kullanıyorsanız, Atlassian SourceTree bunun için çok iyi çalışır. Ücretsizdir.

Aşamalı değişiklikleri yan yana fark kurulumunda görebilir ve yerel ile uzak ve diğer iki dalı kolayca karşılaştırabilirsiniz. Birden fazla dosya seçildiğinde fark aşağıdaki gibi görünür:

resim açıklamasını buraya girin

Bir özellik dalını kontrol ettiğinizi ve 'master'a karşı farkı görmek istediğinizi varsayarsak,' master 'dalına sağ tıklayın ve "Akıma karşı fark" ı seçin

Ne yazık ki, yakında * nix dağıtımlarında mevcut olacak gibi görünmüyor .


3
Bu 'ücretsiz' olabilir ama kesinlikle Kullanım onların tescil Şartları okumak için biraz zaman gerektiriyor: atlassian.com/legal/customer-agreement şimdiye kadar aracı sevmişimdir ama bu beni iterek olabilir.
akauppi

@akauppi Hangi parçalar seni indirdi? Tüm bu anlaşmaların hemen hemen aynı olduğunu düşündüm
alex

Bir yıldan uzun bir süre önceydi. Evet, anlaşmalar benzer olabilir, ancak SourceTree'nin beni zorladığı süreçti. Bu garipti. Yine de bygones. Senin için detaylara sahip olmayacağım. Üzgünüz
akauppi

16

"Difftool" u deneyin (diff araç kurulumunuz olduğunu varsayarak) - bkz. Https://www.kernel.org/pub/software/scm/git/docs/git-difftool.html

Özet için ad durumunu iyi buluyorum ancak difftool değişiklikleri yineleyecek (ve -dseçenek size dizin görünümünü verecektir ), ör.

$ git difftool their-branch my-branch

Viewing: 'file1.txt'
Launch 'bc3' [Y/n]:
...

Ya da @ rsilva4'ten bahsettiğimiz gibi -dve şu anki dalınıza varsayılan olarak - örneğin, ana ile karşılaştırın:

$  git difftool -d master..

... ve evet - birçok varyasyon var - https://www.kernel.org/pub/software/scm/git/docs/git-reset.html


3
Teşekkür ederim, bu yararlı oldu. -D seçeneğini eklemek işleri daha da iyi hale getirecektir:git difftool -d their-abc my-abc
rsilva4

Explainshell.com yana -d seçeneği ayrıştırmak mümkün görünmüyor burada, şu anda manpage diyor:-d --dir-diff: Copy the modified files to a temporary location and perform a directory diff on them. This mode never prompts before launching the diff tool.
waldyrious

8

Eğer github kullanıyorsanız bunun için web sitesini kullanabilirsiniz:

github.com/url/to/your/repo/compare/SHA_of_tip_of_one_branch...SHA_of_tip_of_another_branch

Bu size ikisinin bir karşılaştırmasını gösterecektir.


Bu çalışır (Ben her zaman yaparım) ama kodunuzu github repo itmek gerektirir. Bence bu gerçekten kabul edilebilir bir uyarı değil.
adamwong246

2
ya da sadece github.com/url/to/your/repo/compare/ve sonra şubeleri seçebilirsiniz
caramba

Ve bu SHA'yı nasıl edinebilirim? Demek istediğim, bir dalın uç SHA'sı ne anlama geliyor?
Optimus Prime

8

Gelen GitExtensions ile size revizyon ızgarasında her iki şubesi seçebilirsiniz Ctrlbastırdı. Sonra bu dallar arasında farklılık gösteren dosyaları görebilirsiniz. Bir dosya seçtiğinizde bunun için fark göreceksiniz.

Buradan alındı


Düzeltme ızgaramda 2 dal seçtim, ancak üstteki menüde veya sağ tıklattığımda karşılaştırma komutları görmüyorum.
Eric

1
Alt bölmenin başlıklarında buldum. Tamamlama, Dosya ağacı ve Fark var.
Eric

7

GÜNCELLEME

Mac: Şimdi SourceTree kullanıyorum. İyice önerilir. Özellikle sahneleme / soyulma parçalarını sevme şeklini seviyorum.

Linux: Şununla başarılı oldum:

  • SmartGit
  • GitKraken
  • meld

smartgitUbuntu'ya kurmak için:


Bu işi yapar:

meld gibi bir GUI dif aracı ile git-diffall. Burada 5. maddeye bakınız:

http://rubyglazed.com/post/15772234418/git-ify-your-command-line

Git ve meld hakkında güzel bir yazı var: http://nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy


4

Eclipse kullanıyorsanız, çalışma alanındaki geçerli dalınızı başka bir etiket / dal ile görsel olarak karşılaştırabilirsiniz:

Eclipse çalışma alanı karşılaştırması


Şahsen ben farklı sub-par için Eclipse desteği bulmak, ama eğer tüm bu sahip o zaman sorun değil.
ysap

4

Bunu yapmak için Perforce'den ücretsiz P4Merge'i kullanabilirsiniz:

http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools

resim açıklamasını buraya girin

Git ile entegre edilmesine ilişkin ayrıntılar burada ve burada bulunabilir

ancak yukarıdaki bağlantılardan kısa bir özet:

  • Sizin ~ / .gitconfig aşağıdaki bitlerini koyun ve sonra yapabileceğiniz $ git mergetoolve$ git difftool kullanım p4merge için
  • $ git diffHala varsayılan satır içi fark görüntüleyicisini kullanacağını unutmayın :) (git sürüm 1.8.2 ile test edilmiştir)

.Gitconfig için değişiklikler

[merge]
  keepBackup = false
    tool = p4merge
[mergetool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$PWD/$BASE\"" "\"$PWD/$REMOTE\"" "\"$PWD/$LOCAL\"" "\"$PWD/$MERGED\""
    keepTemporaries = false
    trustExitCode = false
    keepBackup = false
[diff]
    tool = p4merge
[difftool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$REMOTE\"" "\"$LOCAL\""

2

Mükemmel WebStorm düzenleyicisini kullanıyorsanız, istediğiniz herhangi bir dalla karşılaştırabilirsiniz: Webstorm git karşılaştır


Aslında IntelliJ IDEA'nın (muhtemelen WebStorm'un) "Seçilmemiş Taahhütleri Vurgulama" yeteneğine sahip olduğunu fark ettim, bu da hangi taahhütlerin bir başkasında değil, şubede var olduğunu çok açık hale getiriyor.
arthurakay

Evet, Intellij'i bir repoda "otomatik kaydetme ile kaydet" tarafından yapılan bir sürü değişikliği seçici olarak kaldırmak için kullandım. Çok kolay ... Gerçi bunu yapmak için "Yerel ile daha önce karşılaştır" seçeneğini bulmak zorunda
Tom H

1

Bir bak bakalım git show-branch

Core git işlevselliği ile yapabileceğiniz çok şey var. Görsel farkınıza neleri dahil etmek istediğinizi belirtmek iyi olabilir. Çoğu yanıt, örneğin belirli bir işlemden etkilenen dosyaların adlarına odaklandığı taahhütlerin satır satır farklarına odaklanır.

Ele alınmamış gibi görünen bir görsel, şubelerin içerdiği taahhütlerin (ortak veya benzersiz) nasıl görülebileceğidir.

Bu görsel için, ben büyük bir hayranıyım git show-branch; şube başına iyi organize edilmiş bir taahhüt tablosunu ortak ataya geri dağıtır. - farklılıkları olan birden çok dalı olan bir repoda denemek git show-branchiçin çıktıyı yazın ve kontrol edin - örneklerle yazma için bkz. Git Dalları Arasındaki Taahhütleri Karşılaştırma


0

Visual Studio'da (VS 2017'de test edilmiştir) tek dosyaların aksine tüm taahhütler arasındaki görsel farkı nasıl göreceğiniz aşağıda açıklanmıştır. Ne yazık ki, yalnızca bir daldaki taahhütler için çalışır: "Takım Gezgini" nde, "Dallar" görünümünü seçin, repoya sağ tıklayın ve aşağıdaki görüntüdeki gibi "Geçmişi görüntüle" yi seçin.

resim açıklamasını buraya girin

Ardından mevcut dalın geçmişi ana alanda görünür. (Geçerli dalda daha önce sona eren şubelerin etiketlerle işaretlendiği yerlerde.) Şimdi Ctrl-Left ile birkaç işlem seçin, ardından sağ tıklayın ve açılan menüden "İşlemleri Karşılaştır ..." seçeneğini seçin.

Microsoft dünyasındaki dalları karşılaştırmayla ilgili daha fazla bilgi için şu yığın akışı sorusuna bakın: Visual Studio kullanarak git dalları arasındaki farklar .


1
Yalnızca tek bir dalın geçmişini gösterir, bu nedenle dallar arasında karşılaştırma yapamaz.
Michał Fita

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.