Bagaimana cara saya melihat semua komitmen untuk hari tertentu?

188

Saya sudah melihat dokumen yang relevan dari git-scm.com dan gitref.org , tetapi sepertinya saya tidak bisa memahaminya.

Katakanlah saya ingin mendapatkan semua komitmen untuk hari Selasa, 12 November 2013. Dengan menggunakan repo yang ada sebagai contoh, saya tahu pasti bahwa saya memiliki komitmen pada hari itu, serta melakukan hari sebelumnya dan lusa.

Dengan 2013-11-11dan2013-11-12

Semua yang berikut memberi saya komitmen untuk tanggal 11 dan 12 November:

  • 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"

dengan 2013-11-12hanya

Semua yang berikut ini tidak memberi saya komitmen:

  • 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"

Dengan 2013-11-12dan2013-11-13

Seperti yang diharapkan (dari hasil di atas 2013-11-11dan di 2013-11-12atas), semua yang berikut memberi saya hasil dari 12 November dan 13 November:

  • 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"

... dan seterusnya dan seterusnya. Saya merasa seperti saya sudah mencoba setiap kemungkinan kombinasi since, after, before, dan untiltapi masih tidak dapat menemukan jawabannya, aku juga tidak mengerti apakah orang-orang pilihan yang inklusif atau eksklusif, karena mereka tampaknya menjadi inklusif jika dua tanggal yang berbeda, tetapi eksklusif jika mereka pada hari yang sama. Apakah saya melewatkan sesuatu / apa yang saya lakukan salah ?!

3cheesewheel
sumber
8
Saya telah menemukan git sejak / setelah / sampai / sebelum menangani sendiri sangat aneh, jadi saya tidak tahu jawabannya, tetapi apakah Anda sudah mencoba menentukan tanggal + waktu (misalnya, --since = "2013-11-12 00:00 ")? Selain itu, apakah (ada di antara) komit Anda memiliki tanggal committer dan penulis yang berbeda?
John Bartholomew
Kamu mendapatkannya! Menentukan waktu bekerja. Bahkan tidak terpikir oleh saya untuk mencobanya dengan waktu. Terima kasih! Adapun tanggal committer vs penulis - tidak ada patch yang diterapkan selama tanggal tersebut, jadi bukan itu.
3cheesewheel
Menurut saya 'git log --boundary' harus melakukan ini untuk Anda, sehingga 'git log --boundary --after = "2013-11-12" --before = "2013-11-12"' akan menunjukkan tepat satu komit (yang menurut Anda akan :)).
qneill

Jawaban:

231

Terima kasih John Bartholomew!

Jawabannya adalah untuk menentukan waktu, mis git log --after="2013-11-12 00:00" --before="2013-11-12 23:59"

3cheesewheel
sumber
12
Bagus. Namun, perintah itu akan menghilangkan komit antara 23:59 dan 00:00 pada hari berikutnya, oleh karena git log --after="2013-11-12 00:00" --before="2013-11-13 00:00"itu lebih baik. Saya percaya gitk --since="2013-11-12 00:00" --until="2013-11-13 00:00" &ini juga akan berfungsi jika Anda telah menginstal gitk.
HelloGoodbye
6
Dalam git 2.13.0. git log --after="2017-07-25" --before="2017-07-26"memberikan hasil yang valid untuk saya.
Powow
1
Apakah ini untuk cabang yang dicek saat ini? Bagaimana cara melihat seluruh cabang?
nawfal
Ini adalah jawaban yang benar, tetapi saya masih bingung karenanya dan mengirimkan pertanyaan lanjutan ini: stackoverflow.com/questions/59691065/…
bgoodr
28

Saya biasanya memeriksa log git saya dan melihat apa yang saya kerjakan pada hari tertentu dan memperbarui absen berdasarkan itu, tapi itu menyebalkan untuk mengetikkan tanggal penuh dalam format ISO jadi saya hanya melakukannya seperti ini

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

dan saya menambahkan --authorhanya mencetak komit saya

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

Cetakan ini melakukan yang terjadi pada 9 Juni lalu (jadi untuk 2016 dalam kasus ini dan bukan untuk 2015 atau 2014 dan seterusnya).

The --since/--afterdan --until/--beforeparameter juga dapat mengambil hal-hal seperti 3 days ago, yesterday, dll

Kohányi Róbert
sumber
Tidak berfungsi, tidak menghasilkan apa-apa. Apakah saya kehilangan sesuatu? Haruskah saya menentukan cabang?
Aurimas
1
@Aurimas Ya, tidak yakin apa yang salah pada Anda. Jika sincedan untilnilai Anda tidak benar, Anda tidak akan mendapatkan hasil yang pasti. Gunakan git logdulu, dan cobalah untuk mengambil sincedan untilnilai berdasarkan apa yang Anda lihat. Tidak diperlukan cabang atau hal khusus apa pun. Tidak yakin sejak versi Git mana fitur ini tersedia. Pastikan Anda memiliki versi terbaru juga.
Kohányi Róbert
6
Saya harus menggunakan spasi:git log --after="may 2" --before="may 3"
Connor Clark
16

Tidak ada yang salah dengan jawaban yang diterima (yang saya pilih), tapi ... kami di sini untuk ilmu pengetahuan!

Output di bawah ini dapat diperluas / disesuaikan dengan pretty=format:<string> placeholder :

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

Tidak 100% kebal terhadap kesalahan karena string yang sama bisa dimasukkan oleh pengguna. Tetapi dapat diterima tergantung pada placeholder yang digunakan. Cuplikan di atas tidak akan gagal, misalnya.

Seseorang juga bisa menguraikan keseluruhan git loguntuk JSONdan mengkonsumsi / memanipulasi datanya ke isi hati seseorang. Lihat https://github.com/dreamyguy/gitlogg keluar dan jangan pernah melihat ke belakang!

Penafian: itu salah satu proyek saya.

Wallace Sidhrée
sumber
10

Saya membuat alias git untuk tujuan khusus itu:

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"

Pemakaian:

git commitsAtDate 2017-08-18
Michael Große
sumber
1
Anda juga dapat menentukan tanggal relatif terhadap alias ini, yaitu git commitsAtDate yesterday, 2 days ago, dll
voiger
-2

Skrip ini menampilkan rentang tanggal dari komit yang tersedia untuk repo saat ini, lalu meminta tanggal dari mana Anda ingin melihat komit. Ini menampilkan SHA pendek dan SHA lengkap, penulis, timestamp komit, dan komentar dalam tanda kutip tunggal.

Script terus meminta tanggal sampai Anda menekan Enter atau Control-D.

Pengguna Mac: membutuhkan tanggal gnu.

#!/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

Saya menelepon skrip commitsOnDates, dan ini dia beraksi. Tanggal pertama yang saya masukkan tidak memiliki komit, jadi jawabannya hanya berupa baris kosong:

$ 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:
Mike Slinn
sumber