Soru İki revizyon arasında hangi dosyaların değiştiğini gösterme


Bir süredir ayrılmış iki dalı birleştirmek istiyorum ve hangi dosyaların değiştirildiğini bilmek istedim.

Bu bağlantıya rastladım: http://linux.yyz.us/git-howto.html Bu oldukça yararlı oldu.

Karşılaştığım dalları karşılaştırmak için araçlar:

  • git diff master..branch
  • git log master..branch
  • git shortlog master..branch

Sadece iki şube arasında farklı olan dosyaları görmek için "git status master..branch" gibi bir şey olup olmadığını merak ediyordum.

Yeni bir araç oluşturmadan, bunun şu an yapabileceğiniz en yakın program olduğunu düşünüyorum (bir dosya birden fazla değiştirildiyse, tabiki tekrarlayacaktır):

  • git diff master..branch | grep "^diff"

Kaçırdığım bir şey var mı diye merak ediyordum.


1789
2018-05-05 00:47


Menşei


Bu sorunun başlığı kaç kişiyi yanıltıcı buluyor? Aslında iki dal arasındaki dosya farklılıklarını bulmakla ilgilidir. Buraya gelmek için aradığım şey, aynı daldaki iki revizyon arasındaki dosya farklılıklarını görmekti. Yoksa ben tek mi? - Sandeepan Nath
@SandeepanNath: git ile fark yoktur. Bireysel işlemlere ilişkin her zaman sizsiniz. - Samuel O'Malley
@ SamuelO'Malley Gitmek için yeniyim ve tüm dalların nihayet ana dalla birleştirildiği ve sonuçta ustanın yuvarlandığı görünüşte yaygın dallanma stratejisini düşünüyorum. Şimdi, üretimin hâlihazırda ustalıkla yapıldığı, ancak ipucunun arkasında (bir önceki son birleştirmeden sonra son devrelerin yapılıp yapılmadığı bir revizyonla) bir açılış etkinliği göz önünde bulundurulduğunda, bu iki revizyon arasındaki farkları görmek istiyorum. neyin dışarı çıkacağını öğren. En son birleştirilen şubeye bakmak istemem. Eğer Yanlışsam beni düzelt. - Sandeepan Nath
@SandeepanNath: şube isimlerini kullanmak yerine aşağıdaki cevapları alabilir ve bunun yerine işlem kimliklerini belirtebilirsiniz. Ayrıca, kullanıma sunarken etiketler oluşturursanız, bildirimleri etiket adlarına da yönlendirin. - Samuel O'Malley
@SandeepanNath 2 şubeyi karşılaştıramazsınız, revizyonu belirtmelisiniz. Dolayısıyla 2 dalı karşılaştırmak 2 revizyonu karşılaştırıyor. - Bastien Vandamme


Cevaplar:


Mevcut şubeyi karşılaştırmak master

$ git diff --name-status master

Herhangi bir dal çifti karşılaştırmak

$ git diff --name-status firstbranch..yourBranchName

Seni doğru anladığımda, ihtiyacın olanı yapmalı.


2187
2018-05-05 01:04



+1, bazen - sadece isim kullanışlı - Pat Notz
@ user446936 - mektupları git durum man page sayfasında ne anlama geldiğini görebilirsiniz @ kernel.org/pub/software/scm/git/docs/git-status.html - özellikle, M == değiştirildi, D == silindi - James Manning
git diff master..blabla -- bana verir fatal: bad revision 'master..blabla'. git diff master blabla -- bana verir fatal: bad revision 'master'. Neyin var? GÜNCELLEME: bu repo'nun ana adlı bir dalı yok, doh! - akostadinov
git diff --name-status your_branch...master your_branch ondan oluşturulduğundan usta gerçekleşen değişiklikleri verir. - Radu
Git diff kullanırken daha fazla seçeneğin bağlantısı var. git-scm.com/docs/git-diff - akvallejos


Deneyin

$ git diff --stat --color master..branchName

Bu, aynı sayıda satırı kullanırken, her değişiklik hakkında size daha fazla bilgi verecektir.

Ayrıca, başka bir şekilde birleştirmek istiyorsanız, farkın daha net bir resmini elde etmek için dalları çevirebilirsiniz:

$ git diff --stat --color branchName..master

354
2018-02-09 19:38



Eğer (şiddetle tavsiye edilen, imho) git rengi açıksa (config --global color.ui true) - rengini atlayabilirsiniz. (Lks - tembel klavye sendromum var.) - Art Swri
Seninle renkteyim! Btw demek istedim git config --global color.ui true - Tamamlanmak için. - Art Swri
Çalışmıyor, hataları atar: fatal: ambiguous argument 'master..branchName': unknown revision or path not in the working tree. - Tomáš Zato
@ TomášZato üzgünüm ama şubenizin adı ile "branchName" takas etmeniz gerekiyor. - Gerry


Ayrıca git, ucuz ve kolay dallanma olduğunu unutmayın. Birleşmenin sorun yaratabileceğini düşünürsem, birleşme için bir şube yaratırım. Eğer öyleyse master birleştirmek istediğim değişiklikler var ve ba master'dan kodu alan şubem aşağıdakileri yapabilirim:

git checkout ba
git checkout -b ba-merge
git merge master
.... review new code and fix conflicts....
git commit
git checkout ba
git merge ba-merge
git branch -d ba-merge
git merge master

Sonuç olarak, şubemle birlikte vidalamadan önce bir atma dalındaki birleştirmeyi denemem gerekiyor. Eğer kendimi karıştırırsam sadece silebilirim ba-merge dal ve baştan başla.


145
2017-10-11 01:22



Muhteşem. Bu şekilde dallanma düşünmemiştim. Bence bu, birleştirirken “en iyi uygulamaların” bir parçası olarak görülmelidir. - egelev
Ba-marjı ba ile birleştirdiğinizde, çatışmaları tekrar düzeltmek için bir potansiyeliniz yok mu? - Josef.B
Hayır, zaten bunları çözdünüz. - Eric Anderson
@EricAnderson Doğru, bu bir grafik. SVN okul masasının altında sakız gibi yapışır. Teşekkürler. - Josef.B


Birisi iki daldan bir diff dosyası oluşturmaya çalışıyorsa:

git diff master..otherbranch > myDiffFile.diff

45
2018-04-03 14:01



Bu özellikle çok farklı farklılıklar içeren büyük şubelerle işe yarıyor. - vandsh


Git sonucunu beğenmezseniz, birleştirme işlemini denemenizi ve herhangi bir sorundan geri adım atmayı kolaylaştırır. Potansiyel problemleri önceden aramaktan daha kolay olabilir.


30
2018-05-05 00:59



David, bu iyi bir nokta, elden önce neler olduğunu bilmek güzel olsa da ... - johannix


GUI tabanlı bir yöntem de vardır.

Kullanabilirsiniz gitk.

  1. Koşmak:

    $ gitk --all
    
  2. Bir şube taahhüdünü sağ tıklayın ve seçin Bu işlemi işaretle açılır menüde.

  3. Başka bir şubenin taahhüdünü sağ tıklayın ve Diff this -> işaretlenmiş taahhüt veya Diff işaretli taahhüt -> bu.

Ardından sağ alt panelde değiştirilmiş bir dosya listesi ve sol alt panelde farklı ayrıntılar olacak.


29
2018-06-14 06:01



@Orwellophile yüklüyorum video nasıl yapılacağını göstermek için. Umarım size yardımcı olur. - Shawn Xie
Vay, sadece benim için özel hissediyorum. Ben gelecekteki referans ve ekstra google-foo için delicious.com yer imi ettik. - Orwellophile


Bu durumda meld kullanarak bir seçenek daha:

git difftool -d master otherbranch

Bu sadece dosyalar arasındaki farkları görmez, aynı zamanda belirli bir dosyaya işaret etmenin ve tıklamanın kolay bir yolunu da sağlar.


26
2018-04-24 13:23



Varsayılan dizge olarak dizgi ayarlamak isteyebilir: git config --global diff.tool meld - bwv549
Bu benim favorim, çünkü yapılandırdığınız her türlü difftool kullanacaktır. - Josiah
OSX'te desteklenmez. :-( - Mike S.
@MikeS. lütfen bu cevabı kontrol et stackoverflow.com/a/12815806/151918OSX için talimatlar içerir. En azından benim için çalışıyor, umarım yardımcı olur. - rsilva4


İşbirlikçi bir şekilde veya bir kerede birden çok özellik üzerinde çalışırken, üst akışın veya hatta yöneticinizin, şubenize dahil olmayan ve temel olarak temel hatalarda görünecek olan işleri içerdiği yaygındır.

Eğer Upstream'iniz taşınmış olabilirse, bunu yapmalısınız:

git fetch
git diff origin/master...

Sadece git diff master kullanmak, ilgili değişiklikleri içerebilir veya içermez.


14
2018-03-24 03:21