Git'teki şubeler arasındaki taahhüt farklılıklarını nasıl görebilirim?


341

Şube-X'deyim ve üstüne birkaç taahhüt daha ekledim. MASTER ile şube olduğum şube arasındaki bütün farklılıkları taahhüt etmek istiyorum. Sadece yapabilirim

git checkout master
git log

ve sonra bir

git checkout branch-X
git log

ve bunları görsel olarak farklılaştırıyorum, ancak daha kolay, daha az hataya açık bir yöntem umuyorum.


Yanıtlar:


324

Şubelerinizin bununla nasıl farklı olduğuna dair gerçekten güzel, görsel bir çıktı elde edebilirsiniz

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative master..branch-X

13
Bu sorulan dallar arasındaki farkları göstermeyecektir.
Pablo Fernandez heelhook

48
git log --oneline --graph --all --decorate --abbrev-commitsize daha kısa / daha okunabilir bir komutla benzer bir çıktı verecek
Pablo Fernandez heelhook

4
Bunu beğendim:git log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset'
Avery

6
Son derece aşırı karmaşık.
Shawn Erquhart

12
git log --oneline --graph --all --decorateyeterli, --abbrev-commitgerekli değil --oneline, kısa--pretty=oneline --abbrev-commit
avmohan

721

Bunu kolayca yapabilirsiniz

git log master..branch-X

Bu size şube X'in sahip olduğunu taahhüt ediyor ama usta değil.


9
Her iki dalda da diğerinin yapmadığı taahhütler varsa bir seçenek var mı? Şu anda, diğer dalların içermediği taahhütleri görmek için argümanları çevirmeli ve her iki şekilde çalıştırmalısınız.
Elliott Slaughter

38
Eğer daha önce geçiş yaptıysanız branch-Xkullanabilirsinizgit log master..
Dave

8
@ElliottSlaughter: Master veya branch-X'de olan ancak her ikisinde birden olmayan bir taahhüt bulmak istiyorsanız git log master...branch-X(iki yerine üç nokta) kullanabilirsiniz. Daha man gitrevisionsfazla bilgi için bakınız .
Xavier T.

3
Cevabın sadece yarısı.
Ustada

9
Taahhütler ana daldan X dalına kiraz olarak alındıysa, bu filtrelenmez. Hala her ikisinde de olsa "Şube-X'te ama usta değil" taahhütleri listesinde olacaklar ..
Tuffwer

88

Bence seçim ve bağlam meselesi.

git log origin/master..origin/develop --oneline --no-merges

Ana dalda olmayan geliştirme taahhütlerini gösterecektir.

Hangi dosyaların gerçekten değiştirildiğini görmek istiyorsanız

git diff --stat origin/master..origin/develop --no-merges

Bağımsız değişken belirtmezseniz, tam fark görüntülenir. Görsel farkı görmek istiyorsanız meld, linux veya WinMergepencerelere yükleyin . Varsayılan difftools olduklarından emin olun.

git difftool -y origin/master..origin/develop --no-merges

Mevcut dal ile karşılaştırmak istiyorsanız. Kullanım gibi şube adı yerine HEAD kullanmak daha uygundur:

git fetch
git log origin/master..HEAD --oneline --no-merges

Birleştirilmek üzere olan tüm taahhütleri gösterecek


1
Birleştirmesi olabilecek bir yayın dalı karşılaştırırsanız. --no-mergesgit log origin/master..HEAD --oneline --no-merges
Aşağıdaki

15

Linux'taysanız, gitgbunu çok hızlı ve grafik olarak yapmanın yoludur.

Komut satırında ısrar ediyorsanız şunları kullanabilirsiniz:

git log --oneline --decorate

git logVarsayılan olarak daha iyi yapmak için , genellikle bu genel tercihleri ​​ayarladım:

git config --global log.decorate true
git config --global log.abbrevCommit true

14

Aşağıdakileri "taahhütte" farkı görmek için öneririm. Simetrik fark için, komutu ters çevrilmiş değişkenlerle tekrarlayın:

git cherry -v master [your branch, or HEAD as default]

Bu git master..branch-X'den farklı mı?
ilmirons

2
Elbette, "git cherry" akıllıdır: "taahhütlerden" "yamalar / farklar" a çevrilir ve her iki dalda da farklı sırada uygulanan bir "yama" bildirmekten kaçınabilir.
mmaruska

8

gitk kullanmak istiyorsanız:

gitk master..branch-X

güzel bir eski okul GUi var


4

Mükemmel cevap değil, ancak Github kullanan insanlar için daha iyi çalışır :

resim açıklamasını buraya girin

Reponuza git: Insights -> Network


Ayrıca, bir Çekme İsteği oluşturmak, şube farklılıklarını da gösterecektir.
pkamb

Aman tanrım sana sarılmak istiyorum.
esseara

@esseara Ben de büyük bir kucaklamayayım :)) bekliyoruz: D
AIon

2

İşleme mesajlarına göre karşılaştırmak istiyorsanız, aşağıdakileri yapabilirsiniz:

git fetch
git log --oneline origin/master | cut -d' ' -f2- > master_log
git log --oneline origin/branch-X | cut -d' ' -f2- > branchx_log
diff <(sort master_log) <(sort branchx_log)

1
Kullanmak --onelineve boru kullanmak yerine cutkullanabilirsinizgit log --format='%s'
optik

0
#! /bin/bash
if ((2==$#)); then
  a=$1
  b=$2
  alog=$(echo $a | tr '/' '-').log
  blog=$(echo $b | tr '/' '-').log
  git log --oneline $a > $alog
  git log --oneline $b > $blog
  diff $alog $blog
fi

Buna katkıda bulunmak, çünkü görsel bir fark aracınız varsa a ve b günlüklerinin görsel olarak yan yana dağıtılmasına izin verir. Görsel diff aracını başlatmak için komutun sonunda diff komutunu değiştirin.


0

Bazı cevapları kullandım ve durumuma uygun bir tane buldum (tüm görevlerin sürüm dalında olduğundan emin olun).

Diğer yöntemler de işe yarıyor ama değer katan birleştirme taahhütleri gibi, ihtiyacım olmayan satırları ekleyebilir bulundu.

git fetch
git log origin/master..origin/release-1.1 --oneline --no-merges

veya akımınızı master ile karşılaştırabilirsiniz

git fetch
git log origin/master..HEAD --oneline --no-merges

git fetch güncellenmiş bilgileri kullandığınızdan emin olmak için orada.

Bu şekilde her taahhüt bir satırda olacak ve bunu bir metin düzenleyicisine kopyalayıp yapıştırabilir ve görevleri birleştirilecek taahhütlerle karşılaştırmaya başlayabilirsiniz.

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.