Tek bir şube için taahhüt geçmişi nasıl alınır?


129

Diyelim ki my_experimentden yeni bir şube oluşturdum masterve birkaç taahhütte bulundum my_experiment. Bir git logzaman my_experimentyaparsam, bu şubeye yapılan taahhütleri görüyorum, aynı zamanda şube oluşturulmadan masterönce yapılan taahhütleri de görüyorum my_experiments.

my_experimentsO şubenin yaratılışına ulaşana kadar şubeye yapılan tüm taahhütlerin geçmişini görmeyi çok yararlı bulabilirim - etkili bir şekilde sadece o dalın gerçek bir tarihi. Aksi takdirde, kayıtlara baktığımda taahhütlerin my_experimentsşubede olup olmadığı net değil.

Bunu Git ile yapmanın bir yolu var mı?

Yanıtlar:


140

Bunu yapmak için bir aralık kullanabilirsiniz .

git log master..

Şubenizi kontrol ettiyseniz my_experiment. Bu, nerede masterolduğunu HEAD(ucu my_experiment) karşılaştıracaktır.


3
Tamam çok erken konuştu. Bu benim basit örneğim için yaptı. Ama şimdi bir başkasının gerçek deposuna bakıyorum ve aklıma bu komutu doğru kullanmak için mevcut şubemin hangi şubeden oluşturulduğunu bilmem gerektiği anlaşılıyor. Belki de bunu gitk'ten söyleyebilirim ama bu bana açık değil. Düşüncesi olan var mı?
Marplesoft

@Marplesoft Bunu anlamak karmaşık olabilir. Bu soruya bakın .
alex

Nasıl çalıştığını kısaca açıklayabilir misiniz? git log master..Git'e ne anlatıyor?
tonix

2
@tonix Bir aralığın (o master..) parçasının nasıl çalıştığı hakkında daha fazla bilgi için yanıttaki bağlantıyı izleyin .
alex

7

git merge-baseKomut ortak bir atası bulmak için kullanılabilir. Öyleyse, my_experiment henüz ana ile birleştirilmediyse ve my_experiment master'dan oluşturulduysa, şunları yapabilirsiniz:

git log --oneline `git merge-base my_experiment master`..my_experiment

İlk taahhüdünüzün ebeveynini dahil etmek istiyorsanız, ^ ve --first-parent : git log --oneline `git merge-base my_experiment master`^..my_experiment --first-parent
Eric Lavoie

7

Not: Bu günlüğü son n kesinleştirme ile sınırlarsanız (örneğin son 3 işlem, git log -3), 'n' ile dalınız arasına bir boşluk bıraktığınızdan emin olun:

git log -3 master..

Git 2.1'den (Ağustos 2014) önce, bu hata: git log -3master..aslında limiti my_experimentgöz ardı ederek mevcut dalın son 3 kaydını gösterirdi (burada ) master(yani my_experimentsadece bir commit içeriyorsa, 3 tanesi hala listelenirdi, bunlardan 2 tanesi master)

Bkz e3fa568 tamamlama ile (Junio Cı Hamano gitster) :

revizyon: " git log -<count>" öğesini daha dikkatli ayrıştırın

Bu yanlış yazılmış komut satırı basitçe " master" yok sayar ve mevcuttan iki kaydetmeyi gösterir HEAD:

$ git log -2master

çünkü tüm dizenin bir tamsayı olarak ayrıştırıldığından emin olmadan " 2master" öğesini besliyoruz atoi().

Kullanım strtol_i()yerine yardımcı işlevinin.


1

Sadece kullanabilirsin git log --oneline


Bu kod soruyu yanıtlayabilirken, sorunun nasıl ve / veya neden çözüldüğüne ilişkin ek bağlam sağlamak, yanıtın uzun vadeli değerini artıracaktır.
DebanjanB

1

Sanırım amaçlarınız için bir seçenek git log --online --decorate. Bu, hikaye dizinizdeki her dal için kontrol edilen taahhüdü ve en iyi taahhütleri bilmenizi sağlar. Bunu yaparak, deponuzun yapısı ve belirli bir şubeyle ilgili taahhütler hakkında güzel bir görüş elde edersiniz. Okumayı düşünüyorum bu kudreti yardım.


0

Bunun için çok geç olduğunu biliyorum ... Ama işte aradığınızı elde etmek için (o kadar da basit değil) bir oneliner:

git show-branch --all 2>/dev/null | grep -E "\[$(git branch | grep -E '^\*' | awk '{ printf $2 }')" | tail -n+2 | sed -E "s/^[^\[]*?\[/[/"
  • Şube adı ve göreceli pozisyonları ile gerçek şube durumlarına göre taahhütleri listeliyoruz git show-branch(uyarıları gönderiyoruz /dev/null).
  • O zaman sadece şube adımız olanları köşeli ayraç içinde tutuyoruz grep -E "\[$BRANCH_NAME".
  • Gerçekte nerede (yıldızla yankılanan yıldızla dal) ile $BRANCH_NAMEelde edilir git branch | grep -E '^\*' | awk '{ printf $2 }'.
  • Sonuçlarımızdan başlangıçtaki gereksiz satırı ile kaldırıyoruz tail -n+2.
  • Ve sonra, [$BRANCH_NAME]ile önceki her şeyi kaldırarak çıktıyı nişanlı olarak temizleriz sed -E "s/^[^\[]*?\[/[/".
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.