Git kesinti aralıklarında çift nokta “..” ve üçlü nokta “…” arasındaki farklar nelerdir?


Yanıtlar:


251

Bir logkomut veya komut kullanıp kullanmadığınıza bağlıdır diff. Bu logdurumda, man git-rev-parsebelgelerde bulunur:

Ulaşılabilen taahhütleri bir taahhüdün dışında tutmak için, ^ notasyonu öneki kullanılır. Örneğin, ^ r1 r2, r2'den erişilebilen taahhütler anlamına gelir, ancak r1'den erişilebilenleri hariç tutar.

Bu ayarlanan işlem o kadar sık ​​görünür ki bunun için bir kestirme yol vardır. R1 ve r2 olmak üzere iki taahhüdünüz varsa (yukarıdaki BELİRTİLEN REVİZYONLAR'da açıklanan sözdizimine göre adlandırılır), r1'den "^ r1 r2" ile ulaşılabilenler hariç r2'den erişilebilen taahhütler isteyebilirsiniz ve şu şekilde yazılabilir: "r1..r2".

Benzer bir gösterime "r1 ... r2" r1 ve r2'nin simetrik farkı denir ve "r1 r2 - $ değil (git merge-base --all r1 r2)" olarak tanımlanır. R1 veya r2'den birinden ulaşılabilen ancak her ikisinden de alınamayan taahhütler kümesidir.

Bu, temel olarak, iki koldan birinde bulunan, ancak her ikisinde birden olmayan tüm taahhütleri alacağınız anlamına gelir.

Bu diffdurumda, man git-diffbelgelerde bulunur:

  git diff [--options] <commit>...<commit> [--] [<path>...]

      This form is to view the changes on the branch containing and up to
      the second <commit>, starting at a common ancestor of both
      <commit>. "git diff A...B" is equivalent to "git diff
      $(git-merge-base A B) B". You can omit any one of <commit>, which
      has the same effect as using HEAD instead.

Bu biraz bulanık. Temel olarak, bu daldaki başka bir dalla karşılaştırıldığında sadece farklılıkları gösterir: ona verdiğiniz ilk komisyonla son ortak taahhüdü arar ve sonra ikinci komisyonu buna ayırır. Sadece bu branştaki değişikliklere dikkat etmeden, o branşta hangi değişikliklerin yapıldığını görmenin kolay bir yoludur.

..Biraz daha basittir: In git-diffdurumda, bu bir aynıdır git diff A Bve sadece içinde B'ye karşı A diffs logdurumda, bu B'de vardır ancak A'da tüm kaydedilmesini göstermektedir


31
Bu bir anlam ne kadar güzel saçma ..ve ...tam günlüğü ve fark değiştirilmesi söz: log A..Bbudur B'ye birleştirme tabanından değişiklikler diff A...Byapar
phiresky

1
@phiresky Evet, bu gerçekten zayıf kullanılabilirlik. Nokta gösterimlerini kullanmamanızı tavsiye ederim git diff.
wisbucky

2
Bu A...B== anlamına mı geliyor A..B + B..A?
Danon

2
@Danon git logbunun için kesinlikle evet
maoizm

659

Git Günlüğü ile Tamamlama Aralıklarını Kullanma

Eğer böyle aralıkları işlemek kullandığınız zaman ..ve ...birlikte git log, aralarındaki fark, dalları A ve B için, yani

git log A..B

Size gösterecek B A olmadığını sahip olduğunu kaydedilmesini tüm ederken,

git log A...B

Size gösterecek hem B A yok veya diğer bir deyişle, ki bir olduğunu kaydedilmesini ve bu oda yok ve kaydedilmesini de kaydedilmesini tüm filtre edeceğini A ve B grubu hisse hem böylece sadece o hareketin gösteren yok hem pay .

Venn Diyagramları ve İşleme Ağaçları ile Görselleştirme

İşte görsel bir temsili git log A..B. B dalının A'da bulunmayan taahhütleri, taahhüt aralığı tarafından döndürülen şeydir ve Venn diyagramında kırmızı ile vurgulanır ve taahhüt ağacında mavi daire içine alınır:

 "git log A..B" diyagramıAğaç 1

Bunlar şemalardır git log A...B. Her iki dal tarafından paylaşılan taahhütlerin komut tarafından döndürülmediğine dikkat edin:

 "git log A ... B" diyagramıAğaç 2

Triple-Dot İşlem Menüsünü ...Daha Yararlı Hale Getirmek

Hangi dalların hangi branşta ait olduğunu gösterme seçeneğini ...kullanarak, günlük komutunda üçlü nokta tamamlama aralığını daha kullanışlı hale getirebilirsiniz --left-right:

$ git log --oneline --decorate --left-right --graph master...origin/master
< 1794bee (HEAD, master) Derp some more
> 6e6ce69 (origin/master, origin/HEAD) Add hello.txt

Yukarıdaki çıktısında, ait hareketin göreceksiniz masterifadesi eklenir <ait kaydedilmesini iken, origin/masterkodu bulunmaktadır >.

Git Diff ile İşleme Aralıklarını Kullanma

Bir gün, taahhüt aralıklarının nasıl çalıştığına dair kendi açıklamamı ekleyebilirim git diff, ancak şimdilik Git diff commit'deki çift nokta ".." ile üçlü nokta "..." arasındaki farklar neler olduğunu kontrol etmek isteyebilirsiniz. aralıkları? .

Ayrıca bakınız


35
Bu cevap aslında kısa ve öz bir metin, örnekler ve resimlerle farkı açıklıyor. Ben sadece belirsiz belgeleri tırnak şu anda en çok oy alan cevap daha çok seviyorum. (tl; dr bu cevap sayesinde aslında farkı anlıyorum.)
aerique

4
@ Cupcake, anlam diff'i ekleyebilir misiniz?
Marius

1
@Marius aslında, şimdi onu büyüttüğünüze göre, kendiniz gibi gelecekteki okuyucular için cevabımdaki diğer soruya bağlantı vereceğim.

2
Bu aslında tam tersi değil mi? dig diff a..b TÜM diffs veya temel olarak git diff a b ile aynıdır. Oysa git dif a ... b SADECE b'den a.
wejrowski

2
En azından git günlüğü için. Git diff için bazı şeyler tersine çevrilebilir: stackoverflow.com/questions/7251477/…
Benjamin Atkin
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.