Belirli bir günün tüm taahhütlerini nasıl görüntülerim?


188

Git-scm.com ve gitref.org'dan ilgili dokümanlara zaten baktım , ancak bunu anlayamıyorum .

Diyelim ki 12 Kasım 2013 Salı günü tüm taahhütleri almak istiyorum. Mevcut bir repoyu örnek olarak kullanarak, o gün taahhüt ettiğimi ve ertesi gün ve ertesi gün taahhüt ettiğimi biliyorum.

İle 2013-11-11ve2013-11-12

Aşağıdakilerin hepsi bana hem 11 hem de 12 Kasım için taahhüt veriyor:

  • git log --after="2013-11-11" --until="2013-11-12"
  • git log --since="2013-11-11" --until="2013-11-12"
  • git log --after="2013-11-11" --before="2013-11-12"
  • git log --since="2013-11-11" --before="2013-11-12"

ile 2013-11-12sadece

Aşağıdakilerin hepsi bana taahhüt vermiyor:

  • git log --since="2013-11-12" --until="2013-11-12"
  • git log --since="2013-11-12" --before="2013-11-12"
  • git log --after="2013-11-12" --until="2013-11-12"
  • git log --after="2013-11-12" --before="2013-11-12"

İle 2013-11-12ve2013-11-13

Beklendiği gibi ( yukarıdaki 2013-11-11ve 2013-11-12yukarıdaki sonuçlardan ), aşağıdakilerin hepsi 12 ve 13 Kasım tarihleri ​​arasında bana sonuç veriyor:

  • git log --since="2013-11-12" --before="2013-11-13"
  • git log --after="2013-11-12" --before="2013-11-13"
  • git log --since="2013-11-12" --until="2013-11-13"
  • git log --after="2013-11-12" --before="2013-11-13"

... ve benzerleri. Ben mümkün olan tüm kombinasyonlarını denedim gibi hissediyorum since, after, beforeve untilcevap bulamıyorum hala ama, ne de iki tarih farklı ise kapsayıcı görünmektedir çünkü bu seçenekler, kapsayıcı veya özel olup olmadığını anlamaya, ama aynı gün içinde olmaları durumunda münhasırdır. Bir şey mi kaçırdım / neyi yanlış yapıyorum ?!


8
Git'in kendisinden çok garip davranmadan önce / sonra / kadar / önce buldum, bu yüzden cevabı bilmiyorum, ancak tarih + saat belirtmeyi denediniz mi (örneğin, --since = "2013-11-12 00:00 ")? Ayrıca, taahhütlerinizin herhangi birinin yazar tarihlerine göre farklı komisyonları var mı?
John Bartholomew

Tamamdır! Çalışılan süreyi belirtme. Bir süre denemek bile bana gelmedi. Teşekkürler! Committer ve yazar tarihlerine gelince - bu tarihlerde hiçbir yama uygulanmadı, bu yüzden değildi.
cheesewheel

Bana 'git log --boundary' bunu sizin için yapmalı, böylece 'git log --boundary --after = "2013-11-12" --before = "2013-11-12"' tam olarak bir taahhüt (olacağını düşündüğünüz :)).
qneill

Yanıtlar:


231

Teşekkürler John Bartholomew!

Cevap zamanı belirtmektir, ör. git log --after="2013-11-12 00:00" --before="2013-11-12 23:59"


12
Güzel. Bununla birlikte, bu komut ertesi gün 23:59 ve 00:00 arasında taahhütleri atlar, bu nedenle git log --after="2013-11-12 00:00" --before="2013-11-13 00:00"daha iyidir. gitk --since="2013-11-12 00:00" --until="2013-11-13 00:00" &Gitk yüklüyse de işe yarayacağına inanıyorum .
HelloGoodbye

6
Git 2.13.0'da. git log --after="2017-07-25" --before="2017-07-26"benim için geçerli sonuçlar veriyor.
powlo

1
Bu, mevcut kullanıma alınmış dal için mi? Tüm şubelerde nasıl görülür?
nawfal

Bu doğru cevap, ama yine de
şaşkınım

28

Genellikle git günlüğümü kontrol ediyorum ve belirli bir günde ne çalıştığımı görüyorum ve zaman çizelgemizi buna göre güncelliyorum, ancak ISO biçiminde tam tarihi yazmak için kıçta bir acı var, bu yüzden böyle yapıyorum

git log --after=jun9 --before=jun10

ve --authorsadece taahhütlerimi yazdırmayı ekliyorum

git log --since=jun9 --until=jun10 --author=Robert 

Bu baskılar, 9 Haziran'ın sonlarında gerçekleşen taahhütleri yerine getirir (bu durumda 2016 için, 2015 veya 2014 için değil).

--since/--afterVe --until/--beforeparametreleri de böyle şeyler alabilir 3 days ago, yesterdayvs.


Basitçe çalışmaz, hiçbir şey çıkarmaz. Bir şey mi kaçırıyorum? Bir şube belirtmeli miyim?
Aurimas

1
@Aurimas Sonunda neyin yanlış gittiğinden emin değilim. Sizin ise sinceve untildeğerlerin doğru değildir emin için hiçbir çıkış olduğunu en alırsınız. git logÖnce kullanın ve gördüklerinize bağlı olarak bir sinceve untildeğer seçmeye çalışın . Şube veya özel bir şey gerekmez. Hangi Git sürümünden beri bu özelliğin kullanılabilir olduğundan emin değilim. Son sürüme sahip olduğunuzdan emin olun.
Kohányi Róbert

6
Boşlukları kullanmak zorunda kaldım:git log --after="may 2" --before="may 3"
Connor Clark

16

Kabul ettiğim cevapta yanlış bir şey yok (ki ben iptal ettim), ama ... bilim için buradayız!

Aşağıdaki çıktı pretty=format:<string> yer tutucularla genişletilebilir / özelleştirilebilir :

git log --pretty='format:%H %an %ae %ai' | grep 2013-11-12

Bir kullanıcı tarafından aynı dize girildiğinden hatalara karşı% 100 bağışık değil. Ancak hangi yer tutucuların kullanıldığına bağlı olarak kabul edilebilir. Yukarıdaki pasaj başarısız olmaz.

Bir de sadece bütün ayrıştırmak git logiçin JSONve tüketmek / kişinin kalp içeriğiyle verilerini işlemek. Https://github.com/dreamyguy/gitlogg adresini kontrol edin ve asla geriye bakmayın!

Feragatname: bu benim projelerimden biri.


10

Bu özel amaç için bir git takma adı yaptım :

commitsAtDate = "!f() { git log --pretty='format:%C(yellow)%h %G? %ad%Cred%d %Creset%s%C(cyan) [%cn]' --decorate --after=\"$1 0:00\" --before=\"$1 23:59\" --author \"`git config user.name`\"; }; f"

Kullanımı:

git commitsAtDate 2017-08-18

1
Ayrıca, bu takma adın yani göreceli tarihleri belirtebilir git commitsAtDate yesterday, 2 days agovb
voiger

-2

Bu komut dosyası, geçerli repo için kullanılabilecek taahhütlerin tarih aralığını görüntüler ve ardından taahhütlerini görmek istediğiniz tarihi ister. Kısa bir SHA ve tam SHA, yazar, taahhüt zaman damgası ve yorumları tek tırnak içinde görüntüler.

Siz Enter veya Control-D tuşlarına basıncaya kadar komut dosyası tarih girmeye devam eder.

Mac kullanıcıları: GNU tarihi gerektirir.

#!/bin/bash

COMMITS=`git log --abbrev-commit --pretty="format:%h %H %ai" | sort -k3 -k4`
FIRST=`echo "$COMMITS" | head -n 1`
LAST=`echo "$COMMITS" | tail -n 1`
echo "First commit: $FIRST"
echo "Last commit: $LAST"
printf "Date to search for commits: "
read DATE
while [[ "$DATE" ]]; do
  NEXT_DATE=`date +%Y-%m-%d -d "$DATE +1 day"`
  #echo "Searching for commits from $DATE to $NEXT_DATE"
  echo `git log --after="$DATE" --before="$NEXT_DATE" --pretty="format:%h %H %an %ci '%s'"`
  printf "\nDate to search for commits: "
  read DATE
done

Senaryoyu aradım commitsOnDatesve işte burada. Girdiğim ilk tarihte taahhüt yok, bu yüzden yanıt sadece boş bir satır:

$ commitsOnDates
First commit: 375bcfb 375bcfbbf548134a4e34c36e3f28d87c53b2445f 2015-08-03 13:37:16 -0700
Last commit: 1d4c88c 1d4c88ce6a15efaceda1d653eed3346fcae8f5e6 2018-10-13 21:32:27 -0700
Date to search for commits: 2015-08-13


Date to search for commits: 2015-08-03
375bcfb 375bcfbbf548134a4e34c36e3f28d87c53b2445f Mike Slinn 2015-08-03 13:37:16 -0700 'this is a comment'

Date to search for commits: 2018-10-13
1d4c88c 1d4c88ce6a15efaceda1d653eed3346fcae8f5e6 Mike Slinn 2018-10-13 21:32:27 -0700 'a comment' 64d6e16 64d6e16338657b82c91ac94bea8ebf7b80dc4c28 Mike Slinn 2018-10-13 18:28:41 -0700 'nother comment' d5eb26e d5eb26e49fc9dceee9b9f5a2d8fa052bff2cfbbc Mike Slinn 2018-10-13 18:16:20 -0700 'no comment' d8a4992 d8a4992df208ba5efb50728311820bdad5ba5332 Mike Slinn 2018-10-13 12:02:00 -0700 'commented'

Date to search for commits:
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.